在struts中采用jquery利用json數據來動態無刷新更新頁面。首先要準備一下基本知識,struts目前已經是展示層的業內標 準;jquery這里我們需要使用jquery的ajax方式獲取后臺數據;json是一種數據交換格式(不太清楚的可以看我之前的幾篇文章《actionscript數據交互的幾種類型》,《JSON簡介》),項目構建工具maven。

主要講一下的是jquery的ajax提交方式,我采用的是$.post方式:

jQuery.post( url, [data], [callback], [type] )

url??????? 提交地址
data???? 提交的數據
callback 回調函數
type???? 數據類型,這里可以是xml,json,txt

實際代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
														//ajax提交
														
$.post("ajaxGetPersonBuildData.htm",
str,
function(data,textStatus){
if(textStatus=="success"){
for(var i=0;i<$(data).length;i++){
var str = $(data).get(i)[0].followUserEmpId;
$(&quot;#&quot;+str+&quot;b1&quot;).html(&quot;·<a href="\&quot;#\&quot;">&quot;+$(data).get(i)[0].name+&quot;</a>&quot;);
$(&quot;#&quot;+str+&quot;f1&quot;).html(&quot;·<span class="\&quot;black75\&quot;">&quot;+$(data).get(i)[0].areaage+&quot;M<sup>2</sup>&quot;+$(data).get(i)[0].room+&quot;&quot;+$(data).get(i)[0].drawingroom+&quot;&quot;+$(data).get(i)[0].price+&quot;</span>&quot;);
$(&quot;#&quot;+str+&quot;b2&quot;).html(&quot;·<a href="\&quot;#\&quot;">&quot;+$(data).get(i)[1].name+&quot;</a>&quot;);
$(&quot;#&quot;+str+&quot;f2&quot;).html(&quot;·<span class="\&quot;black75\&quot;">&quot;+$(data).get(i)[1].areaage+&quot;M<sup>2</sup>&quot;+$(data).get(i)[1].room+&quot;&quot;+$(data).get(i)[1].drawingroom+&quot;&quot;+$(data).get(i)[1].price+&quot;</span>&quot;);
?
}
}else{
alert(&quot;error&quot;);
}
},
&quot;json&quot;);

回調參數textStatus有以下幾種返回要注意:

  // textStatus can be one of:
// &quot;timeout&quot;
// &quot;error&quot;
// &quot;notmodified&quot;
// &quot;success&quot;
// &quot;parsererror&quot;


接下去進入struts action中進行數據處理:

從request對象中取到的首先是一個字符串,我們要將他轉為json對象再進行數據處理,完成之后返回的數據格式也應該是json對象給出response。

1
2
3
4
5
6
7
8
9
10
			response.setContentType(&quot;application/json;charset=gbk&quot;);
PrintWriter out = response.getWriter();
BufferedReader br =newBufferedReader(newInputStreamReader((ServletInputStream)request.getInputStream()));
String line =null;
StringBuilder sb =new StringBuilder();
while((line = br.readLine())!=null){
sb.append(line);
}
log.info(&quot;Json Input:&quot;+sb.toString());
JSONObject jsonObj = JSONObject.fromObject(sb.toString());

注意最前面的response是進行編碼指定的防止中文造成的亂碼,獲取到POST過來的數據之后通過JSONObject來轉換對象,這里需要引入一個JSON包 (maven依賴)

   <dependency>
<groupid>net.sf.json-lib</groupid>
<artifactid>json-lib</artifactid>
<version>2.2.3</version>
<classifier>jdk15</classifier>
</dependency>

json-lib是一個專門提供java進行JSON格式操作的類包。序列化JAVA對象:

1
2
3
4
5
6
JSONSerializer serializer =new JSONSerializer();
try{
jarray.add(serializer.toJSON(building));
}catch(JSONException e){
log.info(&quot;JSONException:&quot;+e.getMessage());
}

轉換JAVA對象到JSON的時候比較容易發生的異常在java對象的類型,因為是通過反射來轉換對象的有些類型的字段轉換時候會出一些異常,比如日期,長整型等。我的做法是將JAVA對象的字段都設為string。