熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> C編程 >> 正文

JSP在Struts 2中使用JSON Ajax支持

2022-06-13   來源: C編程 

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

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

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

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

  ()登陸站點下載Struts的JSON插件的最新版本當前最新版本是我們可以下載該版本的JSON插件

  ()將下載到的jsonpluginjar文件復制到Web應用的WEBINF路徑下即可完成JSON插件的安裝

  實現Actio邏輯

  假設woen輸入頁面中包含了三個表單域這三個表單域對於三個請求參數因此應該使用Action來封裝這三個請求參數三個表單域的name分別為fieldfield和field

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

public class JSONExample

  {

  //封裝請求參數的三個屬性

  private String field;

  private transient String field;

  private String field;

  //封裝處理結果的屬性

  private int[] ints = { };

  private Map map = new HashMap();

  private String customName = custom;

  //三個請求參數對應的setter和getter方法

  public String getField()

  {

   return field;

  }

  public void setField(String field)

  {

   thisfield = field;

  }

  //此處省略了field和field兩個字段的setter和getter方法

  

  //封裝處理結果的屬性的setter和getter方法

  public int[] getInts()

  {

   return ints;

  }

  public void setInts(int[] ints)

  {

   thisints = ints;

  }

  public Map getMap()

  {

   return map;

  }

  public void setMap(Map map)

  {

   thismap = map;

  }

  //使用注釋語法來改變該屬性序列化後的屬性名

  @JSON(name=newName)

  public String getCustomName()

  {

   return thiscustomName;

  }

  public String execute()

  {

   mapput(name yeeku);

   return ActionSUCCESS;

  }

  }

  在上面代碼中使用了JSON注釋注釋時指定了name域name域指定Action屬性被序列化成JSON對象的屬性名除此之外JSON注釋還支持如下幾個域

  serialize設置是否序列化該屬性

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

  format設置用於格式化輸出解析日期表單域的格式例如yyyyMMddTHH:mm:ss

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

  配置該Action的strutsxml文件代碼如下

<?xml version= encoding=GBK?>

  <!DOCTYPE struts PUBLIC

  //Apache Software Foundation//DTD Struts Configuration //EN

  

  <struts>

  <constant name=strutsinencoding value=UTF/>

  <package name=example extends=jsondefault

  <action name=JSONExample class=leeJSONExample

  <result type=json/>

  </action>

  </package>

  </struts>

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

  第一個地方是配置strutsinencoding常量時不再是使用GBK編碼而是UTF編碼這是因為Ajax的POST請求都是以UTF的方式進行編碼的

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


From:http://tw.wingwit.com/Article/program/c/201404/30451.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.