虽然struts 2.0使用的ajax框架是Dojo和DWR,但是,在使用了JSON后就开始喜欢上它了 ,当struts2.0溶入了JSON插件后就可以允许我们在action中返回json类型的结果(Result)。
这样使得DWR在简易性和灵活性上都比不上JSON插件,所以JSON插件值得向大家双手推荐。在这里要感谢JSON的创始人Musachy Barroso等同志的无私奉献。下面看一个例子:
一:下载JSON插件。
到http://code.google.com/p/jsonplugin/downloads/list下载JSON插件的JAR包,并将其加入到WebContent\WEB-INF\lib下。
二:编写action:
package test;
import java.util.HashMap;
import java.util.Map;
import com.googlecode.jsonplugin.annotations.JSON;
import com.opensymphony.xwork2.Action;
public class JSONExample {
private String field1 = "田明启";
private int[] ints = {10, 20};
private Map map = new HashMap();
private String customName = "custom";
//'transient' fields are not serialized
private transient String field2;
//fields without getter method are not serialized
private String field3;
public String execute() {
map.put("John", "Galt");
return Action.SUCCESS;
}
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
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;
}
@JSON(name="newName")
public String getCustomName() {
return this.customName;
}
}
三:配置action
<package name="Struts2_AJAX_DEMO" extends="json-default">
<action name="JSONExample" class="test.JSONExample">
<result type="json"/>
</action>
</package>
四:一个测试的页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>JSON Plugin</title>
<script type="text/javascript">
var bXmlHttpSupport = (typeof XMLHttpRequest != "undefined" || window.ActiveXObject);
if (typeof XMLHttpRequest == "undefined" && window.ActiveXObject) {
function XMLHttpRequest() {
var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
"Microsoft.XMLHTTP"];
for (var i=0; i < arrSignatures.length; i++) {
try {
var oRequest = new ActiveXObject(arrSignatures[i]);
return oRequest;
} catch (oError) { /*ignore*/ }
}
throw new Error("MSXML is not installed on your system.");
}
}
function showdata() {
if(bXmlHttpSupport) {
var sUrl = 'JSONExample.action';
var oRequest = new XMLHttpRequest();
oRequest.onreadystatechange = function() {
if(oRequest.readyState == 4) {
var data = eval('(' + oRequest.responseText + ')');
var element= document.getElementById('tttt');
element.innerHTML = data.field1+","+data;
}
};
oRequest.open('POST', sUrl);
oRequest.send(null);
}
}
</script>
</head>
<body>
<input type="button" value="点我吧" οnclick="showdata()" />
<div id="tttt"></div>
</body>
</html>
上面代码最关键的是
var data = eval('(' + oRequest.responseText + ')');
这句,它将json数据解析为javascript数据了。
oK,运行程序 点击按钮后,显示如下: