struts2,ajax,json傳json給Action中的類對象,並返回需要的數據


一.准備

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>

 

此文章只為記錄學習和幫助和我一樣的菜鳥,前輩們路過發現不雅之處,可以指教下我,謝謝大家了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM