简单的说struts2 与json 整合需要几个步骤:
1. 导入整合的jar 包 struts2-json-plugin-2.2.1.jar
2. 配置sturts.xml 文件:
<package name="json" namespace="/json" extends="json-default">
<action name="category_book" method="categoryBook" class="categoryAction">
<result type="json">
<param name="includeProperties">data.*</param>
</result>
</action>
</package>
自定义json package 包 必须继承 json-default 。 因为 插件struts2-json-plugin-2.2.1.jar 中有默认的配置文件 struts-plugin.xml
文件中内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="json-default" extends="struts-default">
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
<interceptors>
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
</interceptors>
</package>
</struts>
3.action层 对 数据的处理
public class CategoryAction extends BaseAction{
private HibernateService hbase;
private List data;
public String categoryBook(){ //
data=hbase.queryAll();
return SUCCESS;
}
public List getData() {
return data;
}
public void setData(List data) {
this.data = data;
}
}
主要注意的是:返回给客户端json 串的处理, 返回的数据要借助sturts2 用 ActionSupport 和 ModelDriven 。返回的数据必须有get set 方法 。代码中用的 List 集合。
在sturts.xml 中需要配置成:
<result type="json"> <param name="includeProperties">data.*</param> </result> 这里面的data 代表action 层中的 List data
4. 在客户端解析 json 串
//书籍分类加载
$().ready(function(){
var url=$("#categoryBookUrl").val();
$.post(url,{},function(data){
var obj=data;
var categoryElement=document.getElementById("category");
$.each(obj, function(i, n){
$.each(n, function(i, m){
var optionElement=document.createElement("option");
optionElement.setAttribute("id",m.categoryId);
optionElement.setAttribute("value",m.name);
var textElement=document.createTextNode(m.name);
optionElement.appendChild(textElement);
categoryElement.appendChild(optionElement);
});
});
});
});
返回的json 是以数据形式需要遍历。不清楚返回json 串的结构可以用火狐debug 看一下返回数据的结构。进行分析。
2.点 struts2 与json 串整合 如果 可以在前台用 struts 值栈取值
配置方法如下:
(1)
<action name="privilegeActionJson_*" method="{1}" class="privilegeAction">
<result type="json"></result>
</action>
(2)
public String showPrivilegeTreeByrid() {
Collection<Privilege> privilegeList=this.privilegeService.getPrivilegeTreeByUid(rid);
ServletActionContext.getContext().getValueStack().push(privilegeList);
return SUCCESS;
}
(3)
这样在前台返回的数据就是 json 数据格式 (包括 ajax 回调函数)
createTree:function(){
$.post("json/privilegeActionJson_showAllMenuitem.action",null,function(data){
$("#tree").zTree(tree.setting,data);
});
}