本文主要是使用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;
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动态显示列表