struts2.1.8.1+jquery1.4.2返回json資料
1、引入包(本文中的包全部引自struts-2.1.8.1\lib):
- struts2-json-plugin-2.1.8.1.jar
- json-lib-2.1.jar
- commons-collections-3.2.jar
- commons-beanutils-1.7.0.jar
- commons-lang-2.3.jar
- commons-logging-1.0.4.jar
- ezmorph-1.0.3.jar
這7個包是返回json形式的資料必須的。因為json大量引用了Apache commons的包,所以要加入4個,commons包,除了commons的包外,還需要引入一個 ezmorph的包。最後加入struts2必須的6個包:
- struts2-core-2.1.8.1.jar
- xwork-core-2.1.6.jar
- ognl-2.7.3.jar
- freemarker-2.3.15.jar
- commons-fileupload-1.2.1.jar
- commons-io-1.3.2.jar
2、後臺:
- 1) Userinfo實體類程式碼
public class UserInfo implements Serializable { private int userId; private String userName; private String password; get set方法略 } |
public class TestAction extends ActionSupport { private String message; //使用json返回單個值 private UserInfo userInfo; //使用json返回物件 private List userInfosList; //使用josn返回List物件 get set方法略 /*返回單個值*/ public String returnMsg(){ this.message = "成功返回單個值"; return SUCCESS; } /*返回UserInfo物件*/ public String returnUser(){ userInfo = new UserInfo(); userInfo.setUserId(10000); userInfo.setUserName("劉棟"); userInfo.setPassword("123456"); return SUCCESS; } /*返回List物件*/ public String returnList(){ userInfosList = new ArrayList<UserInfo>(); UserInfo u1 = new UserInfo(); u1.setUserId(10000); u1.setUserName("張三"); u1.setPassword("111111"); UserInfo u2 = new UserInfo(); u2.setUserId(10001); u2.setUserName("李四"); u2.setPassword("222222"); userInfosList.add(u1); userInfosList.add(u2); return SUCCESS; } } |
<package name="default" namespace="/json" extends="json-default"> <action name="returnMsg" class="com.testAction " method="returnMsg"> <result name="success" type="json"> <param name="root">validate</param> </result> </action> <action name="returnUser " class="com.testAction " method="returnUser "> <result name="success" type="json"> <param name="includeProperties"> userInfo\.userId,userInfo\.userName,userInfo\.password </param> </result> </action> <action name="returnList" class="com.testAction " method="returnList"> <result name="success" type="json"> <param name="includeProperties"> userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password </param> </result> </action> </package> |
3、前臺:
- 1) 頁面引入jquery-1.4.2.js
- 2) 程式碼如下:
<script language="javascript"> function getMsg(){ $.ajax({ url:'json/returnMsg.action', type:'post', dataType:'json', success:function(data){ $("#result").html(data.message); } }); } function getUser(){ $("# result ").html(""); $.ajax({ url:'json/returnUser.action', type:'post', dataType:'json', success:function(data){ $("#result").append("使用者ID:"+data.userInfo.userId+"") .append("使用者名稱:"+data.userInfo.userName+"") .append("密碼:"+data.userInfo.password+""); } }); } function getUserList(){ $("# result ").html(""); $.ajax({ url:'json/returnList.action', type:'post', dataType:'json', success:function(data){ $.each(data.userInfosList,function(i,value){ $("#result").append("第"+(i+1)+"個使用者") .append("使用者名稱:"+value.userName+"") .append("密碼:"+value.password+""); } } }); } </script> <div id="result"></div> <input type="button" value="獲得單個訊息" onclick="getMsg()"/> <input type="button" value="獲得使用者資訊" onclick="getUser()"/> <input type="button" value="獲得使用者列表" onclick="getUserList()"/> |
4、只要繼承extends="json-default",result type設定成json之後,容器會把action的屬性自動封裝到一個json物件中(json攔截器來做),然後呼叫ajax的callback方法. 返回json資料
5、includeProperties 引數:輸出結果中需要包含的屬性值,這裡正規表示式和屬性名匹配,可以用“,”分割填充多個正規表示式。
如:輸出UserInfo的所有屬性及UserInfo的userName屬性
<result type="json"> <param name="includeProperties"> userInfo.*, userInfo \. userName </param> </result> |
6、excludeProperties 引數:輸出結果需要剔除的屬性值,也支援正規表示式匹配屬性名,可以用“,”分割填充多個正規表示式,類同includeProperties
7、輸出一個JSON List列表
<result name="success" type="json"> <param name="includeProperties"> userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password </param> </result> |
其中userInfosList是action中的一個List型別的屬性,userInfosList \[\d+\]\. userName表示,userInfosList中儲存的物件0..end的userName屬性(list中儲存的物件必須有userName屬性)。
8、為什麼要用includeProperties或excludeProperties 引數:主要是為了過濾掉介面,pojo的set、list、其它物件等不需要的資料防止迴圈取其它關聯物件或找不到介面。如果不配置,預設是處理action中的所有屬性,如果action中有介面注入,json攔截器可能找不到介面而返回不了結果,還有如果action中有一個物件,這個物件與好多物件都有關聯,json攔截器會將相關聯的所有物件的屬性全部轉換成json格式,如果其它物件有list、set,其返回結果相當龐大,有可能是死迴圈而無法返回 。如果不用<param name="includeProperties">或其他方式進行json資料過濾,通過debug你會發現前臺返回的json字串,是把action中的所有屬性全部轉化成json字串返回給客戶端(包括service介面、pojo所有屬性及有關聯的pojo。有時候根本返回不了結果,也不報錯,後臺執行了,但前臺執行不到callback function,這主要是因為找不到介面或者關聯的pojo太多,造成死迴圈),一般情況下用的最多的就是root、includeProperties 和excludeNullProperties引數。當然還有其他的方法,如給pojo的屬性加json註解。
9、總結: action中避免使用get開頭的action方法,去掉action中的介面的get方法 為json型別的result配置includeProperties, excludeProperties等引數.
相關文章
- 讓Solr返回JSON資料SolrJSON
- json字串返回的資料有重複的資料JSON字串
- 如何取出 API 呼叫返回的 JSON 資料APIJSON
- Go抓取網頁資料並存入MySQL和返回json資料Go網頁MySqlJSON
- 蝦皮商品詳情介面返回資料的json格式JSON
- flask返回資料的幾種方式(字串,json,元祖)Flask字串JSON
- spring mvc 返回json資料的四種方式SpringMVCJSON
- java通過url呼叫遠端介面返回json資料JavaJSON
- 那些年遇到的後臺返回的奇葩json資料JSON
- jQuery通過ajax返回json格式資料簡單介紹jQueryJSON
- 從零開始學Spring Boot系列-返回json資料Spring BootJSON
- spring boot 解決後臺返回 json 到前臺中文亂碼之後出現返回json資料包錯Spring BootJSON
- Spring學習手冊 1:Spring MVC 返回JSON資料SpringMVCJSON
- [PHP]為JSON資料的API返回空陣列或者空物件PHPJSONAPI陣列物件
- 前端資料與後臺分離,使用mockjs模擬後臺返回json資料前端MockJSON
- Laravel 8 表單驗證丟擲異常返回 json 格式資料LaravelJSON
- 遍歷JObject中的Json資料(以百度雲人臉識別api返回的JSON資料為例)ObjectJSONAPI
- 諸葛測字線上測算免費api介面_json格式資料返回APIJSON
- JSON資料JSON
- 返回hash 型別的json型別JSON
- 關於重寫 Laravel 表單驗證器 Request 返回 JSON 的資料格式LaravelJSON
- ajax返回json格式資料總是有問題,原因是bom頭資訊JSON
- 005、v3admin學習,ci4後端返回json資料後端JSON
- fastjson 返回json字串,JSON.parse 報錯ASTJSON字串
- Map 轉json資料,json資料轉換為MapJSON
- JSON資料整理JSON
- json資料解析JSON
- JSON 資料格式JSON
- 格式化 curl 返回的 jsonJSON
- php json_decode返回nullPHPJSONNull
- iOS返回的JSON資料中的unicode 轉換為中文iOSJSONUnicode
- web api 返回Json資料中人格式帶T處理WebAPIJSON
- Go之json資料GoJSON
- 解析大資料json大資料JSON
- 讀取JSON資料JSON
- 處理JSON資料JSON
- jmeter 取json資料JMeterJSON
- json資料介紹JSON