struts2中配置json
struts2和json的集成,是为了适应在action 处理完后需要向对端输出相应对象的多个属性,简单的例子是:多级select标签的联动,这个时候从action返回的值不仅仅是SUCCESS or ERROR这么简单,而是在后端拼接好的<option>xxx</option>,这个时候JSON排上了用场
附加一句,如果不是在Struts2中使用json,例如在servlet中,这个时候是通过拼接json格式的字符串返回到前端(注:这只是我看到有类似的例子,稍后自己会亲手测试下..这或许我印证了: struts2h会把返回的对象自动封装成相应的json格式. 这句话,只不过在servlet里我们是自己来动手封装了)
原理:通过配置,struts2会调用action里面相应属性的getter方法拿到对象,在封装成jsong格式后序列化传送到前端
配置方式:
1>加入json-lib-2.4-jdk15.jar
2>在struts.xml的配置里面加上:
<package name="strtus2" extends="json-default"></package>
注:以后要用到json的action extends这个包就可以了
3>action的配置 例子:
<action name="registerUtilAction" class="springRegisterUtilAction" >
<result name="areaListDO" type="json"> <!-- type=json 切记 result的name属性要和返回的属性名一样-->
<param name="excludeNullProperties">true</param> <!-- 是否去掉返回值为NULL的properties -->
<param name="includeProperties"><!-- 包括哪些properties -->
areaListDO
</param>
</result>
</action>
4> 编写action,记住返回的属性一定要有getter方法,不需要返回的属性可用:
@JSON(serialize = false)
这个json注解标示,即不序列化这个属性,最好不需要返回的都这么注解,否则可能会出现不能序列化的异常等
5>前端提取json对象,这里推荐用firebug等工具查看下:
可以清晰的看到json的内容,甚至json的格式:对与这截图 我的areaListDO 只有两个属性 areaList(又包括areaId,areaInfoPK和areaName三个属性) 和results两个属性,还是比较方便的, 在前端提取json格式可以这样:
json.areaListDO.results 即json对象的areaListDO(这个是我返回的属性名)的results这个属性
也可以 json["areaListDO"].results 之所以这么取 是看到网上有人说用中括号[] 取是避免属性中有中文,不过我亲自测试过,用"." 取含有中文的属性也是没有乱码的...
大功告成 ..