在Struts 2中使用JSON Ajax支援

來源:互聯網
上載者:User

在Struts 2中使用JSON Ajax支援

  JSON外掛程式提供了一種名為json的ResultType,一旦為某個Action指定了一個類型為json的Result,則該Result無需映射到任何視圖資源。將下載到的jsonplugin-0.7.jar檔案複製到Web應用的WEB-INF路徑下,即可完成JSON外掛程式的安裝。

 

  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檔案代碼如下: 

<?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。

在上面設定檔中有兩個值得注意的地方:

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

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

轉自:http://webservices.ctocio.com.cn/tips/424/7670924.shtml

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.