Struts2的Ajax应用

一、基本原理

使用拦截器机制,对Action的成员变量做持久化处理。

 

 

二、包的设置

<package.../>元素的属性extends为“json-default”,“json-default”的result type可以为“json”。

json-default 设置后,result就会被Struts2的拦截器拦截。并按json序列化后返回。

 视图为Action的字段,且字段按JSON格式序列化输出给客户端全部字段输出

 

三、指定序列化字段

解决方案:

在struts2.xml配置文件中里配置

        <param name="includeProperties"></param> 这个属性表示要包含进JSON数据中的数据。

        <param name="excludeProperties"></param> 这个属性表示不要包含进JSON数据中的数据。

注意:

Jar包是jsonplugin-0.25的,只支持excludeProperties,不支持includeProperties。

从0.28版本才开始支持includeProperties。

 

讨论:

只要有get方法,都会包含到json对象的属性,比如此useraction转为json如下:

{"allDatas":null,"analysisList":null,"maps":{6388:170},"message":null,"model":{"attachName":null,"attachPath":null,"auditStatus":null,"briefTitle":"null"}"

有时候我们只想指定的字段转为json,这时需要在xml里配置<param name="includeProperties">。

例:xml配置

<package name="example"  extends="json-default">
   <action name="JSONExample" class="com.test.UserAction">
     <result type="json">
       <param name="includeProperties">
         name,maps.*
       </param>
     </result>
   </action>
</package>
 

例如:配置返回refreshDatas集合中的字段

<action name="vote" class="com.test.VoteAction" method="{1}">
    <result name="error" type="json">
        <param name="includeProperties">message</param>
    </result>
    <result name="success" type="json">
        <param name="includeProperties">message,refreshDatas\[\d+\]\.newsId,refreshDatas\[\d+\]\.numberOfVotes</param>
    </result>
</action>

 


四、指定非序列化字段

为了使Action类的某些对象不序列化,则只需要字段不提供get方法即可。

或使用@JSON(serialize=false) ,或使用@Transient注解该字段。

@JSON和json类型的result都还有很多可选项,无非就是串行化谁,不串行化谁,返回数据的MIME类型,读者可以自行参考相关文档。

 

 

 

参考文档:

http://bosslife.blog.163.com/blog/static/114917017201061911130625/

http://bangsen.iteye.com/blog/969353

http://topic.csdn.net/u/20091214/14/c57aa29d-2588-473c-8e17-032e35a8e696.html

http://wenku.baidu.com/view/26d9a9f67c1cfad6195fa734.html

http://struts.apache.org/2.2.3/docs/json-plugin.html 

你可能感兴趣的:(struts2)