程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在Struts 2中使用JSON插件

在Struts 2中使用JSON插件

編輯:關於JAVA

JSON插件提供了一種名為json的ResultType,一旦為某個Action指定了一個類型為json的Result,則該Result無需映射到任何視圖資源。因為JSON插件會負責將Action裡的狀態信息序列化成JSON格式的數據,並將該數據返回給客戶端頁面的JavaScript.

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

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

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

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

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

實現Actio邏輯

假設wo,en輸入頁面中包含了三個表單域,這三個表單域對於三個請求參數,因此應該使用Action來封裝這三個請求參數。三個表單域的name分別為field1、field2和field3.

處理該請求的Action類代碼如下:

public class JSONExample
   {
   //封裝請求參數的三個屬性
   private String field1;
   private transient String field2;
   private String field3;
   //封裝處理結果的屬性
   private int[] ints = {10, 20};
   private Map map = new HashMap();
   private String customName = "custom";
   //三個請求參數對應的setter和getter方法
   public String getField1()
   {
   return field1;
   }
   public void setField1(String field1)
   {
   this.field1 = field1;
   }
   //此處省略了field1和field2兩個字段的setter和getter方法
   ...
   //封裝處理結果的屬性的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:設置是否序列化該屬性

deserialize:設置是否反序列化該屬性。

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

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

配置該Action的struts.xml文件代碼如下:

public class JSONExample
   {
   //封裝請求參數的三個屬性
   private String field1;
   private transient String field2;
   private String field3;
   //封裝處理結果的屬性
   private int[] ints = {10, 20};
   private Map map = new HashMap();
   private String customName = "custom";
   //三個請求參數對應的setter和getter方法
   public String getField1()
   {
   return field1;
   }
   public void setField1(String field1)
   {
   this.field1 = field1;
   }
   //此處省略了field1和field2兩個字段的setter和getter方法
   ...
   //封裝處理結果的屬性的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;
   }
   }

在上面配置文件中有兩個值得注意的地方:

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

第二個地方是配置包時,自己的包繼承了json-default包,而不再繼承默認的default包,這是因為只有在該包下才有json類型的Result.

在上面配置文件中有兩個值得注意的地方:

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

第二個地方是配置包時,自己的包繼承了json-default包,而不再繼承默認的default包,這是因為只有在該包下才有json類型的Result.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved