176142998

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            116 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks
          插件提供了一種名為json的ResultType,一旦為某個Action指定了一個類型為json的Result,則該Result無需映射到任何視圖資源。因為JSON插件會負責(zé)將Action里的狀態(tài)信息序列化成JSON格式的數(shù)據(jù),并將該數(shù)據(jù)返回給客戶端頁面的JavaScript。

            簡單地說,JSON插件允許我們在JavaScript中異步調(diào)用Action,而且Action不再需要使用視圖資源來顯示該Action里的狀態(tài)信息,而是由JSON插件負責(zé)將Action里的狀態(tài)信息返回給調(diào)用頁面——通過這種方式,就可以完成Ajax交互。

            Struts2提供了一種可插拔方式來管理插件,安裝Struts2的JSON插件與安裝普通插件并沒有太大的區(qū)別,一樣只需要將Struts2插件的JAR文件復(fù)制到Web應(yīng)用的WEB-INF/lib路徑下即可。

            安裝JSON插件按如下步驟進行:

            (1)登陸http://code.google.com/p/jsonplugin/downloads/list站點,下載Struts2的JSON插件的最新版本,當(dāng)前最新版本是0.7,我們可以下載該版本的JSON插件。

            (2)將下載到的jsonplugin-0.7.jar文件復(fù)制到Web應(yīng)用的WEB-INF路徑下,即可完成JSON插件的安裝。

            實現(xiàn)Actio邏輯

            假設(shè)wo,en輸入頁面中包含了三個表單域,這三個表單域?qū)τ谌齻€請求參數(shù),因此應(yīng)該使用Action來封裝這三個請求參數(shù)。三個表單域的name分別為field1、field2和field3。

            處理該請求的Action類代碼如下:   public class JSONExample
            {
            //封裝請求參數(shù)的三個屬性
            private String field1;
            private transient String field2;
            private String field3;
            //封裝處理結(jié)果的屬性
            private int[] ints = {10, 20};
            private Map map = new HashMap();
            private String customName = "custom";
            //三個請求參數(shù)對應(yīng)的setter和getter方法
            public String getField1()
            {
            return field1;
            }
            public void setField1(String field1)
            {
            this.field1 = field1;
            }
            //此處省略了field1和field2兩個字段的setter和getter方法
            ...
            //封裝處理結(jié)果的屬性的setter和getter方法
            public int[] getInts()
            {
            return ints;
            }
            public void setInts(int[] ints)
            {
            this.ints = ints;
            }
            public Map getMap()
            {
            return map;
            }
            public void setMap(Map map)
            {
            this.map = map;
            }
            //使用注釋語法來改變該屬性序列化后的屬性名
            @JSON(name="newName")
            public String getCustomName()
            {
            return this.customName;
            }
            public String execute()
            {
            map.put("name", "yeeku");
            return Action.SUCCESS;
            }
            }
            在上面代碼中,使用了JSON注釋,注釋時指定了name域,name域指定Action屬性被序列化成JSON對象的屬性名。除此之外,JSON注釋還支持如下幾個域:


            

          serialize:設(shè)置是否序列化該屬性

            deserialize:設(shè)置是否反序列化該屬性。

            format:設(shè)置用于格式化輸出、解析日期表單域的格式。例如"yyyy-MM-dd'T'HH:mm:ss"。

            配置該Action與配置普通Action存在小小的區(qū)別,應(yīng)該為該Action配置類型為json的Result。而這個Result無需配置任何視圖資源。

            配置該Action的struts.xml文件代碼如下:  <?xml version="1.0" encoding="GBK"?>
          <!DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
          "http://struts.apache.org/dtds/struts-2.0.dtd">
          <struts>
          <constant name="struts.i18n.encoding" value="UTF-8"/>
          <package name="example" extends="json-default">
          <action name="JSONExample" class="lee.JSONExample">
          <result type="json"/>
          </action>
          </package>
          </struts>  
            在上面配置文件中有兩個值得注意的地方:

            第一個地方是配置struts.i18n.encoding常量時,不再是使用GBK編碼,而是UTF-8編碼,這是因為Ajax的POST請求都是以UTF-8的方式進行編碼的。

            第二個地方是配置包時,自己的包繼承了json-default包,而不再繼承默認的default包,這是因為只有在該包下才有json類型的Result。
          posted on 2008-08-04 09:33 飛飛 閱讀(210) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 梧州市| 台湾省| 阿克| 盱眙县| 富阳市| 罗平县| 玛纳斯县| 平乐县| 久治县| 龙州县| 闸北区| 静安区| 华阴市| 麟游县| 奉新县| 长治市| 泽普县| 太康县| 灌云县| 易门县| 新巴尔虎左旗| 淮北市| 安龙县| 寻甸| 乳山市| 伊通| 陈巴尔虎旗| 东源县| 武乡县| 交城县| 中方县| 阿克陶县| 崇义县| 工布江达县| 大埔区| 博客| 韩城市| 喜德县| 宁南县| 黄山市| 扬州市|