虽然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="点我吧" onclick="showdata()" /> <div id="tttt"></div> </body> </html>
上面代码最关键的是
var data = eval('(' + oRequest.responseText + ')');
这句,它将json数据解析为javascript数据了。
oK,运行程序 点击按钮后,显示如下: