struts2要返回JSON,需要在Action中定义该变量,如data1,然后定义该变量的get、set方法。
第一种方式
将Action中定义了get方法的变量全部返回,注意package必须extends= "json-default",对应的struts.xml如下:
<package name="default" extends="struts-default,json-default">
<action name="dataMap" class="action.testAction" method="initData">
<result name="dataMap" type="json"></result>
</action>
</package>
testAction如下:
private Map<String,Object> dataMap;
public String initData() throws JSONException{
dataMap = new HashMap<String, Object>();
User user = new User();
user.setUname("张三");
user.setUpassword("123");
dataMap.put("user", user);
// 放入一个是否操作成功的标识
dataMap.put("success", true);
return "dataMap";
}
public Map<String, Object> getDataMap() {
return dataMap;
}
前端的js请求代码如下:
$("#b1").click(function(){
$.post({
url:'dataMap',
data:"{}",
datatype:'json',
success:function(data){
console.log(data);
}
})
})
这种方法不好的地方是会将Action中所有具有get方法的变量都返回回去,比如在testAction中又定义了变量data2,如果想不返回data2,则需要给getData2加上注解
//设置data2属性不作为json的内容返回
@JSON(serialize=false)
public String getData2() {
return data2;
}
第二种方式
如果想根据不同的请求返回相应的值,使用另一种方法,struts.xml如下
<action name="dataMap" class="action.testAction" method="tests">
<result name="dataMap" type="json">
<param name="root">dataMap</param>
</result>
</action>
只会返回<param name="root">变量</param>
中定义的变量
网友评论