struts不像springMVC,对json有很好的支持,所以介绍下在struts中如何使用ajax传输json数据。
js:
在js处都是一样的:
$.ajax({
type: "post",
url: '${root}/json/TbMstJyglbmdm/test_ajax.jspx',
cache:false,
data:null,
dataType:'json',
/* contentType:"text", */
async:false,
success: function(data){
console.log(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert('发生错误');
}
});
1.使用最基础的方式:
JsonObject json = new JsonObject();
json.addProperty("msg", "ok");
json.addProperty("type", "1");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = null;
try {
out = response.getWriter();
out.print(json);
} catch (java.io.IOException e) {
e.printStackTrace();
}
通过response的方式out输出结果。
这里使用的是google的gson包。
2.使用struts2之后支持的struts2-json,先去下载jar包。
(1)引入jar包,maven配置好信息
(2)在struts文件中,新建package
<package name="json" namespace="/json" extends="json-default">
<action name="TbMstJyglbmdm/test_ajax" method="test_ajax" class="org.my431.base.web.TbMstJyglbmdmAction">
<result name="ok" type="json">
<!-- 这里的jsonData对应action里要返回的map对象 -->
<param name="root">jsonData</param>
</result>
</action>
</package>
package:
name:名字唯一
namespace:对应地址的url
extends:必须是json-default
action:
name:对应url地址的名称
class:对应哪个class文件
method:该class文件中的某个方法
result:
name:方法的返回值,如:
public String test_ajax() {
return "ok";
}
type:类型必须为json
param:中间的值必须为前台想要接受的值,如我的数据都在jsonData之中。
(3)写方法:
public String test_ajax() {
dataMap = new HashMap<String, Object>();
// 放入一个是否操作成功的标识
dataMap.put("success", true);
dataMap.put("name", "张三");
dataMap.put("age", 11);
jsonData = new JSONObject();
jsonData.put("text1", "1");
jsonData.put("text2", "2");
return "ok";
}
成功获取数据:
tips:
1.下载的struts2-json必须要版本号与项目的struts相同,不可过高,否则报错。
2.在action处写json时,不要使用com.google.gson,否则传输的数据为空,这里使用的是fastJson