JSON插件提供了一種名為json的ResultType,一旦為某個(gè)Action指定了一個(gè)類(lèi)型為json的Result,則該Result無(wú)需映射到任何視圖資源。因?yàn)镴SON插件會(huì)負(fù)責(zé)將Action里的狀態(tài)信息序列化成JSON格式的數(shù)據(jù),并將該數(shù)據(jù)返回給客戶(hù)端頁(yè)面的JavaScript。
簡(jiǎn)單地說(shuō),JSON插件允許我們?cè)贘avaScript中異步調(diào)用Action,而且Action不再需要使用視圖資源來(lái)顯示該Action里的狀態(tài)信息,而是由JSON插件負(fù)責(zé)將Action里的狀態(tài)信息返回給調(diào)用頁(yè)面——通過(guò)這種方式,就可以完成Ajax交互。
Struts2提供了一種可插拔方式來(lái)管理插件,安裝Struts2的JSON插件與安裝普通插件并沒(méi)有太大的區(qū)別,一樣只需要將Struts2插件的JAR文件復(fù)制到Web應(yīng)用的WEB-INF/lib路徑下即可。
安裝JSON插件按如下步驟進(jìn)行:
(1)登陸http://code.google.com/p/jsonplugin/downloads/list站點(diǎn),下載Struts2的JSON插件的最新版本,當(dāng)前最新版本是0.7,我們可以下載該版本的JSON插件。
。2)將下載到的jsonplugin-0.7.jar文件復(fù)制到Web應(yīng)用的WEB-INF路徑下,即可完成JSON插件的安裝。
實(shí)現(xiàn)Actio邏輯
假設(shè)wo,en輸入頁(yè)面中包含了三個(gè)表單域,這三個(gè)表單域?qū)τ谌齻(gè)請(qǐng)求參數(shù),因此應(yīng)該使用Action來(lái)封裝這三個(gè)請(qǐng)求參數(shù)。三個(gè)表單域的name分別為field1、field2和field3。
處理該請(qǐng)求的Action類(lèi)代碼如下:
public class JSONExample { //封裝請(qǐng)求參數(shù)的三個(gè)屬性 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"; //三個(gè)請(qǐng)求參數(shù)對(duì)應(yīng)的setter和getter方法 public String getField1() { return field1; } public void setField1(String field1) { this.field1 = field1; } //此處省略了field1和field2兩個(gè)字段的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; } //使用注釋語(yǔ)法來(lái)改變?cè)搶傩孕蛄谢蟮膶傩悦?BR> @JSON(name="newName") public String getCustomName() { return this.customName; } public String execute() { map.put("name", "yeeku"); return Action.SUCCESS; } } 在上面代碼中,使用了JSON注釋?zhuān)⑨寱r(shí)指定了name域,name域指定Action屬性被序列化成JSON對(duì)象的屬性名。除此之外,JSON注釋還支持如下幾個(gè)域:
serialize:設(shè)置是否序列化該屬性 deserialize:設(shè)置是否反序列化該屬性。 format:設(shè)置用于格式化輸出、解析日期表單域的格式。例如"yyyy-MM-dd'T'HH:mm:ss"。
配置該Action與配置普通Action存在小小的區(qū)別,應(yīng)該為該Action配置類(lèi)型為json的Result。而這個(gè)Result無(wú)需配置任何視圖資源。
配置該Action的struts.xml文件代碼如下:
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "<struts> 。糲onstant name="struts.i18n.encoding" value="UTF-8"/> <package name="example" extends="json-default"> 。糰ction name="JSONExample" class="lee.JSONExample"> 。紃esult type="json"/> </action> 。/package> </struts> 在上面配置文件中有兩個(gè)值得注意的地方:
第一個(gè)地方是配置struts.i18n.encoding常量時(shí),不再是使用GBK編碼,而是UTF-8編碼,這是因?yàn)锳jax的POST請(qǐng)求都是以UTF-8的方式進(jìn)行編碼的。
第二個(gè)地方是配置包時(shí),自己的包繼承了json-default包,而不再繼承默認(rèn)的default包,這是因?yàn)橹挥性谠摪虏庞衘son類(lèi)型的Result。
|