struts2傳送json陣列,js使用ajax接收。
1、使用到的jar包
1、commons-lang.jar
2、commons-beanutils.jar
3、commons-collections.jar
4、commons-logging.jar
5、ezmorph.jar
6、json-lib-2.2.2-jdk15.jar
7、struts-json-plugin.jar(如果不用struts2就不用這個)
2、java檔案
package meiko.server; import net.sf.json.JSONArray; import com.opensymphony.xwork2.ActionSupport; public class GetAllTask extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; private JSONArray allTaskJson;// 返回值 private String taskPage;// 請求的頁碼 public JSONArray getAllTaskJson() { return allTaskJson; } public void setAllTaskJson(JSONArray allTaskJson) { this.allTaskJson = allTaskJson; } public String getTaskPage() { return taskPage; } public void setTaskPage(String taskPage) { this.taskPage = taskPage; } public String getAllTask() { String respnse = "[{a:1,b:2,c:3},{a:2,b:3,c:4},{a:3,b:4,c:5}]"; allTaskJson = JSONArray.fromObject(respnse); return SUCCESS; } }
本例中,GetAllTask類中需要定義兩個全域性變數(均為private)。
其中一個為allTaskJson與struts.xml中的返回值同名。當方法呼叫完畢後,將該allTaskJson的內容返回給客戶端。另外一個為taskPage,用於獲取客戶端傳送過來的引數。
這兩個全域性變數都要擁有get/set方法。
*在方法中照java的方式完成各種資料的處理,只需要明確從客戶端來的輸入和返回給客戶端的輸出即可。
3、struts.xml檔案
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="Function" extends="struts-default,json-default"> <action name="getAllTask" class="meiko.server.GetAllTask" method="getAllTask"> <result name="success" type="json"> <param name="root">allTaskJson</param> </result> </action> </package> </struts>
<package name="Function"------並沒有什麼用,可隨便寫。
<package ... extends="struts-default,json-default">------前面的內容為預設內容,需要返回json時加上json-default。
<action name="getAllTask"------在ajax中呼叫時用到的名字。
<action ... class="meiko.server.GetAllTask"------方法所在類的完整路徑(包名+類名)
<action ... method="getAllTask">------類中定義的方法名。
<result name="success" type="json">------預設success,type為返回型別,有固定幾個type,按需百度。
<param name="root">allTaskJson</param>------型別不同param的name也不同,name似乎也有對應的固定值,具體百度。allTaskJson為返回值,與類中定義的用於返回的全域性變數一致。
Web.xml的內容使用固定寫法即可,沒什麼要改動的。
4、ajax呼叫struts的介面
$.ajax({
type: "GET",
dataType: "json",
url:"getAllTask?taskPage="+taskPage;
success: function (data) {
//data為json陣列格式,可以直接呼叫。
},
error: function () {
alert("任務列表查詢失敗");
}
});
getAllTask為struts.xml中設定的,?後為要輸入的引數,taskPage即java檔案中的一個全域性變數。
如果不需要輸入引數,則java檔案中不需要taskPage引數,此處url也改為簡單的"getAllTask"即可。
釋出成功後也可直接通過瀏覽器訪問,如圖所示,是標準的json陣列(吧)