开发者学堂课程【Java Web开发系列课程 - Struts2框架入门:json 的实现】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/537/detail/7327
json 的实现
使用 struts2 插件来实现 ajax 处理(返回 json 格式数据)
所谓的插件其实就是为了实现某一个功能,功能是多种多样的,有可能是拦截器。
插件在的包里面,凡是后面带着 plugin 的都是插件,有非常多,比如 jsf、json 等。
插件基本上都会有插件的配置文件,如果要使用 json 的话,首先要把 json 的插件拿进来,导入一些包,里面有很多类去处理相关的操作。
首先要导入 ezmorph,这里面有一些处理 json 格式的类,去处理一些相关格式。
其实只需要把 json 的插件拿进来,缺少哪些包会进行提醒,然后再去导入相关的 jar 包就可以了。
查看在 struts 的插件:
<struts>
<package name="json-default"extends= "struts-default">
<result-types>
<result-typename="json"class="org.apache. struts2.json.JS
O
NResult"/>
</result-types>
<interceptors>
<interceptorname="json"class="org.apache. struts2.json.JSONInterceptor"/
>
</interceptors>
</package>
其中 json-default 是继承 struts-default,我们如果要使用要再继承 json-default 的 jar 包。
result-types 就是 json-default,interceptors 是拦截器,一般情况下都是通过拦截器把它拦截的。
把结果集的源码导进来,可以看到结果集。它里面的 root、execute 就是可以参考的。
Convention 的 plugin 也是一样,其中有一些常量,使用的话需要继承 convention-default。
插件有以下几类,一般情况下是我们的处理集去处理,还有就是通过拦截器去处理,struts 就是这样一种作用,但他的处理对象是处理之后的结果,而不是处理之前的。
我们配置的其实是其中的 root,它里面所需要的类型包括属性等其实是本身带有的。
除了 struts 插件之外,其他的插件也是一样的,如果要使用需要去继承,处理的核心功能是拦截器。
现在就查看一下怎样处理,首先创建一个 java class 名为 jsonAction。
输入 action 代码为:
public class JsonAction {
private JSONArray root ;
public String execute(){
List<User> list = new Array
l
ist<User>( );
list.add(new
U
ser
(
"sigg
y
"
,23
));
list.add(new User("
zhangsan
",2
2
));
list.add(new User("
老王
",2
1
));
root=JSONArray .fromObject(list);
System. out . println("json= "+root . toString( )) ;
return
“success”
;
}
public JSONArray getRoot() {
System. out . println("获取
root 数据
") ;
return root ;
}
public void setRoot (
J
SONArray root) {
this.root = root;
}
其中的 root 名字可以随便取,需要另外配置一下。
在 structs.xml 里面的代码为:
<struts>
<packagename="default"extends= "json-default”namespace="/
<action name= "ajax" class= "cn. sxt. action.AjaxAction">
</action>
<action name="json" class= "cn.
sxt. action. JsonAction">
<result type= "json">
<param name= "root">root< /param>
</result>
</action>
</package>
Struts 里面因为 action 里面是一个 list,struts 里面就是一个 json default。
配置的是 root,要去找他的 set 方法,然后再去配置。
Action 里面只是在后台写的代码,把 action 里面的代码复制一遍,输入到 json.jsp。
修改新代码为:
<body>
<input type="button" id= "btn" value= "获取json数据"/>
<table width="80%" align="center">
<tr>
<td>姓名</td>
<td>年龄</td>
</tr>
<tbody id="content">
</tbody>
</table>
</bady>
$(function( ){
$(' #btn').click(function(){
$. post ("json. action", function(data){
alert(data);
alert(data. length);
}, 'json');
});
});
</script>
在网页中打开 json.jsp,点击获取 json 数据,是一个一个的对象,因为后台写了三个对象,所以也显示三个对象。
在源代码中就调用了对象,在 execute 之后就调用了 struts,通过 action 对象调用 get方法。
得到数据之后在 json.jsp 里可以把数据处理一下,
将 alert(data);alert(data. length);
改为:
var html=
”
”
for(var i=0;i<data. Length;i++){
html+="<tr><td>"+data[i].name+"</td><td>"+data[i]. age+"</td><
/tr
>";
$(' #content ' ) . html (html);
}
写好之后再刷新网页,会发现数据到了网页上。