最近做项目,项目中使用了struts2结合spring。发现页面发送ajax请求到action中时,action的返回值只是一个return "json"(注:值为"json")。而页面中ajax的返回值则是json格式的值。对于较少使用struts2的同学来说,多少会有些迷惑。本人查了一些资料才搞明白struts2原来幕后做了一些工作来简化逻辑。那么struts2都做了什么又是如何在配置和代码中体现的呢?
配置如下:
需要action所在的package继承了json-default,或者继承的父包继承了json-default。配置action的结果返回类型的type为json。
<package name="json" namespace="/test" extends="struts-default,json-default" >
<action name="json" class="json.JsonAction" method="operatFun">
<result type="json">
<param name="root">jsonMap</param>
</result>
</action>
</package>
代码如下:
注意 dataMap 必须是action类中的一个属性值,且实现了get方法。
public class JsonAction extends BaseAction{
private Map<String,Object> jsonMap= new HashMap<String,Object>();
public Map<String, Object> getJsonMap() {
return jsonMap;
}
public void setJsonMap(Map<String, Object> jsonMap) {
this.jsonMap = jsonMap;
}
public String operatFun{
//一些逻辑处理
//给jsonMap赋值
jsonMap.put("name", "尼玛");
jsonMap.put("age", 10);
jsonMap.put("success", true);
return "json";
}
}
页面ajax:
jQuery.ajax({
type:"post",
url:"$homeModule.getTarget("/test/operatFun.action"),
async:true,
dataType: "json",
success:function(result){
if(result.success == true){
name=result.name;
age=result.age;
}else{
name="";
age=0;
}
},
error:function(result){
alert("失败,请重试");
}
});
});
至此,我们可以看到action返回了一个"json",而ajax得到了一个json。(是不是有点绕)