一.准備
1.json所需jar包:(有時候內容沒問題,仔細檢查jar包,是不是少了,各種版本雜交....我用的是struts2-2.5.8里jar包,可以成功)
commons-lang.jar
json-lib-2.3-jdk15.jar
struts2-json-plugin-2.2.3.jar
ezmorph-1.0.1.jar
commons-beanutils-1.9.2.jar
commons-collections-3.1.jar
除此之外,stuts2環境不用多說了。
二.內容
1.說明
就一個html頁面test.html。流程就是在提交部分輸入數據,點擊提交,把數據傳到TestAction,這個Action里沒有對應提交數據的屬性(username,password),而是一個Mytest類的對象,Mytest封裝了username和password屬性。因為考慮到實際上,可能一個Action中有很多需要接收的數據時,Action里要寫很多屬性,雜亂臃腫不堪,很不舒服,所以用專門類封裝起來,用類對象去接收,舒服很多。然后在execute方法里,簡單處理下上傳接收到的數據,然后把它封裝成一個json字符串,返回給前台調用的Ajax,前台仍舊那個test.html頁面顯示部分再簡單顯示下返回json數據。
2.代碼
(1)test.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="js/jquery-3.1.1.js"></script> </head> <body> <h3 style="color:red">提交數據部分</h3> <table style="border:1px solid black;width:300px;height:150px;"> <tr> <td>username:</td> <td><input type="text" id="username"></td> </tr> <tr> <td>password:</td> <td><input type="password" id="pass"></td> </tr> <tr> <td colspan="2"><input type="submit" onclick="test()"></td> </tr> </table> <h3 style="color:red">顯示下傳回的json數據</h3> <table style="border:1px solid blue;width:300px;height:100px;"> <tr> <td>傳回的username:</td> <td><div id='backusername' style='color:red;'></div></td> </tr> <tr> <td>傳回的password:</td> <td><div id='backpassword' style='color:red;'></div></td> </tr> </table> <script> function test(){ //下面這個是我們上傳時候用到的對象,這里一定要注意的是,我們后台用的是類對象去接受這些上傳的數據 //所以里面的屬性名要寫成Action里的'對象名.屬性名',千萬別直接寫成'屬性名',不然后台那個對象接收不到 var mytest={ 'mytest.username':$('#username').val(), 'mytest.password':$('#pass').val() }; $.ajax({ url:'usertest.action', type:'post', data:mytest, dataType:"json", success:function(data){ //有時候感覺接受的數據總是顯示各種亂七八糟的錯誤,你可以先alert看下,傳回的是什么東西 alert(data); //隨便的顯示一下傳回的數據嘍 var backdata=JSON.parse(data); //傳回的是json字符串,要先把它轉換成js中的類對象,對於json字符串和json對象自己去百度 $('#backusername').html(backdata.backusername);//將json字符串轉換成json對象后,就可以這樣獲取其中的值。 $('#backpassword').html(backdata.backpassword); } }); } </script> </body> </html>
(2)Mytest.java(封裝了Action里需要接收用的屬性username和password)
package com.st.model; public class Mytest { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
(3)TestAction(關鍵的地方了)
package com.st.action; import java.util.HashMap; import java.util.Map; import com.opensymphony.xwork2.ActionSupport; import com.st.model.Mytest; import net.sf.json.JSONObject; public class TestAction extends ActionSupport { private Mytest mytest; //在此action里需要用到的屬性,當要用到的屬性多到一定數量,壞處大家都知道,所以用個類來封裝那些屬性,當然小例子嘛,隨便寫幾個屬性。 private String returndata; //從Action返回json數據給調用的Ajax,畢竟用用Ajax基本上要交互下嘛。 //對應getter,setter public String getReturndata() { return returndata; } public void setReturndata(String returndata) { this.returndata = returndata; } public Mytest getMytest() { return mytest; } public void setMytest(Mytest mytest) { this.mytest = mytest; } //下面是用來處理業務,返回所想要的json給Ajax的函數 @Override public String execute(){ System.out.println(mytest); System.out.println("下面傳上來的name:"+mytest.getUsername()); System.out.println("下面傳上來的password:"+mytest.getPassword()); //把前台頁面上傳的數據封裝成json再傳回去顯示下 Map<String,String> map=new HashMap<String,String>(); map.put("backusername", mytest.getUsername()); map.put("backpassword", mytest.getPassword()); //上面的map不是json當然是不可以用於返回的,於是呢我們要把它搞成json字符串,你也可以自己去拼json字符串。 JSONObject json=JSONObject.fromObject(map); returndata=json.toString(); //result默認的name就是SUCCESS return SUCCESS; } }
(4)struts.xml(對應action的配置,需要注意的細節部分。ps:我是整合了spring的,不過也就一點地方不一樣)
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.objectFactory" value="spring"></constant> <!-- 下面是我們要寫的地方了 --> <package name="default" extends="json-default"> <!-- 下面是我們要聲明配置的action --> <action name="usertest" class="usertestAction" method="execute"> <!-- 注意2個地方,最上面package繼承(extends)的是json-default,下面result的type是json --> <result name="success" type="json"> <!-- 這里的name=root是返回json數據時的一種類型,root是json字符串中只包含該對象的屬性,而其他類型,可能會在返回的json類型中額外包含其他的屬性和值 ,不一一說了--> <!-- 然后這個returndata 是我們action里定義的返回的json。 --> <param name="root">returndata</param> </result> </action> </package> </struts>
此文章只為記錄學習和幫助和我一樣的菜鳥,前輩們路過發現不雅之處,可以指教下我,謝謝大家了。