struts2.1.8以後,加入了json的plugin外掛程式包,使用時僅需把外掛程式包(struts2-json-plugin-2.2.1.1.jar)放入到項目中的WEB-INF/lib下面就可以。這裏重點解釋返回結果result中的root參數的含義,相對於其他參數,例如includeProperties, excludeProperties,excludeNullProperties等,比較難以理解。
(1)struts.xml 配置:
<struts>
<constant name="struts.i18n.encoding" value="UTF-8" />
<package name="default" namespace="/" extends="json-default">
<action name="jsontest" class="com.test.action.JsonJqueryStruts2Action">
<result name="regInfo" type="json">
<param name="root">userInfo</param>
<!-- <param name="includeProperties">userInfo.userId,userInfo.userName</param> -->
<param name="includeProperties">userId,userName</param>
<param name="excludeNullProperties">true</param>
</result>
</package>
</struts>
(2)Action類:類中有一個String類型的屬性message,以及一個bean叫UserInfo
public class JsonJqueryStruts2Action extends ActionSupport {
private String message; //使用json返回單個值
private UserInfo userInfo; //使用json返回對象
... ...
(3)表單:form中必須與Action類中的屬性名字大小寫完全對應,不然會找不到該欄位
<form>
用戶ID:<input name="userInfo.userId" type="text"/><br/>
用戶名:<input name="userInfo.userName" type="text"/><br/>
... ...
(4)json.js檔的ajax方法:
//向服務器發送表達數據
$("#regRe").click(function(){
//把表單的數據進行序列化
var params = $("form").serialize();
 
對於中文,注意亂碼的處理,前面已經有文章說過了。
//使用jQuery中的$.ajax({});Ajax方法
$.ajax({
 
 
url:"jsontest!regUserInfo.action",
type:"POST",
data:params,
dataType:"json",
success:function(data){
//清空顯示層中的數據
$("#message").html("");
//為顯示層添加獲取到的數據
//獲取對象的數據用data.userInfo.屬性
//$("#message").append("<div><font color='red'>用戶ID:"+data.userInfo.userId+"</font></div>")
//.append("<div><font color='red'>用戶名:"+data.userInfo.userName+"</font></div>")
$("#message").append("<div><font color='greed'>111:"+data.userId+"</font></div>");
$("#message").append("<div><font color='greed'>222:"+data.userName+"</font></div>");
if( typeof(data.message)!='undefined' ){
$("#message").append("<div><font color='greed'>結果:"+data.message+"</font></div>");
}else{
$("#message").append("<div><font color='greed'>結果是message沒定義!"+data.message+"</font></div>");
}
... ...
以上是jquery+json+struts2的主要核心配置和代碼,請注意struts2配置中指定了result的name="root",所謂root的含義,是指返回的json數據的根為root中指定的bean類,例如此處為userInfo,如果沒有指定root屬性,則默認使用Action作為返回的json數據的根,區別如下:
result中使用了root參數後返回的json數據:
{"userInfo":[
{"userId":"Patrick", "userName":"123456"}
]}
result中沒設置root參數返回Action中的json數據:
{"data":[
{"userInfo":[ {"userId":"Patrick", "userName":"123456"} ] },
{"message":"testMesssageData"}
]}
所以我們要注意,如果設置了root屬性之後,<param includeProperties></param>中就應該直接使用userId,userName而非userInfo.userId,userIndo.userName了。
此外,json.js代碼中還展示了遇到類似message等屬性返回後是undefined的情況可以使用typeof()!='undefined'進行判斷
 
 
 
 

    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()