本文主要是使用struts2 和 json 做一个简单的示例。
1、环境
struts2的基本配置就不赘述了,以下是此demo用到的所有jar包:
commons-fileupload-1.2.2.jar;
commons-io-2.0.1.jar;
commons-lang3-3.1.jar;
commons-logging-1.1.1.jar;
freemarker-2.3.19.jar;
javassist-3.11.0.GA.jar;
json-lib-2.3-jdk15.jar;
ognl-3.0.5.jar;
struts2-core-2.3.4.1.jar;
struts2-json-plugin-2.3.4.1.jar;
xwork-core-2.3.4.1.jar;
这些包都能在下载好的struts2下的lib目录找到,我使用的版本是
struts-2.3.4.1
2、示例
struts2自带了json插件,所以在使用上不会像以前那么繁琐。
下面是Action的代码:
private DemoService demoService = new DemoServiceImpl();
private User user;
/**
* 执行方法
*/
public String show() throws Exception {
user = demoService.getUserById(userId);
return SUCCESS;
}
这里的user是一个标准的pojo对象,service通过user的ID返回一个对象。
然后是struts.xml代码:
<package name="demo" extends="json-default" namespace="/json"> <action name="*Action" class="com.demo.action.DemoAction" method="{1}"> <result type="json" /> </action> </package>
在使用json传递对象时,包必须继承json-default,而非struts-default包,不然是无法识别type为json的返回结果的。
下面是前台页面demo.jsp的主要实现代码:
<script type="text/javascript"> function getJsonInfo() { var val = $("#userId").val(); $.ajax({ type : "post", url : "json/showAction", dataType:"json", data : {'userId':val}, success : function(data) { $("#username").text(data.user.username); $("#password").text(data.user.password); $("#birthday").text(data.user.birthday); $("#div_display").show(); } }); } </script>
通过ajax直接传递id到后台,获得user对象。
注:网上找资料,发现有些人通过一下的方式传递json:
public String show() throws Exception {
user = demoService.getUserById(userId);
JSONObject json = JSONObject.fromObject(user);
System.out.println("json is " + json);
return SUCCESS;
}
上面代码经测试,不知道是不是我的使用方法不对,打印语句无法执行到,而且,前台也无法得到数据。
还有就是,当result里面的Type是json时,它回默认把action里面所有序列化过的属性全部传递出去,而我们的业务类往往不需要这么做,所以:
@JSON(serialize = false)
public DemoService getDemoService() {
return demoService;
}
只要在get该属性的方法前面注明不序列化它就可以了。
如有错误请及时指出。
相关博文介绍: Struts2 json ajax动态显示列表