日期:2014-05-16  浏览次数:20485 次

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 之所以这么取 是看到网上有人说用中括号[] 取是避免属性中有中文,不过我亲自测试过,用"." 取含有中文的属性也是没有乱码的...
     大功告成 ..





1 楼 f0rb 2012-01-25  
struts2-json-plugin.jar,有这个jar包就行了,你看看这个jar包下面的struts-plugin.xml的里面都写了些啥就知道了。
2 楼 liuInsect 2012-01-25  
f0rb 写道
struts2-json-plugin.jar,有这个jar包就行了,你看看这个jar包下面的struts-plugin.xml的里面都写了些啥就知道了。

  恩..是的..这个也可以的./