天天看點

struts jquery json 異步加載

Struts2+JQuery+JSON實作異步互動,包括從背景獲得單個值、對象、List和Map資料并從前台的表達中擷取值把值進行序列化通過JQuery的$.ajax({})傳到背景和背景的對象進行綁定。

第一步:在MyEclipse中建立JavaWeb工廠并把Struts2 和 json的jar包添加到工程中添加完成後的工程圖是:

struts jquery json 異步加載

第二步:建立背景:

  1. UserInfo實體類:

struts jquery json 異步加載

package struts2jsonjquery.test.entity;   

import java.io.Serializable;   

/**   

 * <p>   

 *  使用者實體類   

 * </p>   

 * @author 朱延偉   

 *   

 */   

public class UserInfo implements Serializable {   

    private static final long serialVersionUID = 3952189513312630860L;   

    private int userId;   

    private String userName;   

    private String password;   

    public int getUserId() {   

        return userId;   

    }   

    public void setUserId(int userId) {   

        this.userId = userId;   

    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;   

}  

struts jquery json 異步加載

package struts2jsonjquery.test.entity;  

import java.io.Serializable;  

/**  

 * <p>  

 *  使用者實體類  

 * </p>  

 * @author 朱延偉  

 *  

 */  

public class UserInfo implements Serializable {  

    private static final long serialVersionUID = 3952189513312630860L;  

    private int userId;  

    private String userName;  

    private String password;  

    public int getUserId() {  

        return userId;  

    }  

    public void setUserId(int userId) {  

        this.userId = userId;  

    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;  

2. Action類

struts jquery json 異步加載

package struts2jsonjquery.test.action;   

import java.util.ArrayList;   

import java.util.HashMap;   

import java.util.List;   

import java.util.Map;   

import struts2jsonjquery.test.entity.UserInfo;   

import com.opensymphony.xwork2.ActionSupport;   

public class JsonJqueryStruts2Action extends ActionSupport {   

    private static final long serialVersionUID = 3518833679938898354L;   

    private String message;     //使用json傳回單個值   

    private UserInfo userInfo;      //使用json傳回對象   

    private List<UserInfo> userInfosList;     //使用josn傳回List對象   

    private Map<String,UserInfo> userInfosMap;    //使用json傳回Map對象   

    //為上面的的屬性提供get,Set方法   

    public String getMessage() {   

        return message;   

    public void setMessage(String message) {   

        this.message = message;   

    public UserInfo getUserInfo() {   

        return userInfo;   

    public void setUserInfo(UserInfo userInfo) {   

        this.userInfo = userInfo;   

    public List<UserInfo> getUserInfosList() {   

        return userInfosList;   

    public void setUserInfosList(List<UserInfo> userInfosList) {   

        this.userInfosList = userInfosList;   

    public Map<String, UserInfo> getUserInfosMap() {   

        return userInfosMap;   

    public void setUserInfosMap(Map<String, UserInfo> userInfosMap) {   

        this.userInfosMap = userInfosMap;   

    /**   

     * <p>   

     *  傳回單個值   

     * @return   

     */   

    public String returnMessage(){   

        this.message = "成功傳回單個值";   

        return "message";   

     *  傳回UserInfo對象   

     * </p>   

    public String returnUserInfo(){   

        userInfo = new UserInfo();   

        userInfo.setUserId(10000);   

        userInfo.setUserName("張三");   

        userInfo.setPassword("000000");   

        return "userInfo";   

     *  傳回List對象   

    public String returnList(){   

        userInfosList = new ArrayList<UserInfo>();   

        UserInfo u1 = new UserInfo();   

        u1.setUserId(10000);   

        u1.setUserName("張三");   

        u1.setPassword("000000");   

        UserInfo u2 = new UserInfo();   

        u2.setUserId(10001);   

        u2.setUserName("李四");   

        u2.setPassword("111111");   

        UserInfo u3 = new UserInfo();   

        u3.setUserId(10002);   

        u3.setUserName("王五");   

        u3.setPassword("222222");   

        UserInfo u4 = new UserInfo();   

        u4.setUserId(10003);   

        u4.setUserName("趙六");   

        u4.setPassword("333333");   

        userInfosList.add(u1);   

        userInfosList.add(u2);   

        userInfosList.add(u3);   

        userInfosList.add(u4);   

        return "list";   

     *  傳回Map對象   

    public String returnMap(){   

        userInfosMap = new HashMap<String,UserInfo>();   

        userInfosMap.put(u1.getUserId()+"", u1);   

        userInfosMap.put(u2.getUserId()+"", u2);   

        userInfosMap.put(u3.getUserId()+"", u3);   

        userInfosMap.put(u4.getUserId()+"", u4);   

        return "map";   

     *  獲得對象,也就是通過表達獲得對象(異步的)   

     * </P>   

    public String gainUserInfo(){   

        System.out.println("使用者ID:"+userInfo.getUserId());   

        System.out.println("使用者名:"+userInfo.getUserName());   

        System.out.println("密碼:"+userInfo.getPassword());   

     * 獲得單個值就不用寫了和平常一樣   

struts jquery json 異步加載

package struts2jsonjquery.test.action;  

import java.util.ArrayList;  

import java.util.HashMap;  

import java.util.List;  

import java.util.Map;  

import struts2jsonjquery.test.entity.UserInfo;  

import com.opensymphony.xwork2.ActionSupport;  

public class JsonJqueryStruts2Action extends ActionSupport {  

    private static final long serialVersionUID = 3518833679938898354L;  

    private String message;     //使用json傳回單個值  

    private UserInfo userInfo;      //使用json傳回對象  

    private List<UserInfo> userInfosList;     //使用josn傳回List對象  

    private Map<String,UserInfo> userInfosMap;    //使用json傳回Map對象  

    //為上面的的屬性提供get,Set方法  

    public String getMessage() {  

        return message;  

    public void setMessage(String message) {  

        this.message = message;  

    public UserInfo getUserInfo() {  

        return userInfo;  

    public void setUserInfo(UserInfo userInfo) {  

        this.userInfo = userInfo;  

    public List<UserInfo> getUserInfosList() {  

        return userInfosList;  

    public void setUserInfosList(List<UserInfo> userInfosList) {  

        this.userInfosList = userInfosList;  

    public Map<String, UserInfo> getUserInfosMap() {  

        return userInfosMap;  

    public void setUserInfosMap(Map<String, UserInfo> userInfosMap) {  

        this.userInfosMap = userInfosMap;  

    /**  

     * <p>  

     *  傳回單個值  

     * @return  

     */  

    public String returnMessage(){  

        this.message = "成功傳回單個值";  

        return "message";  

     *  傳回UserInfo對象  

     * </p>  

    public String returnUserInfo(){  

        userInfo = new UserInfo();  

        userInfo.setUserId(10000);  

        userInfo.setUserName("張三");  

        userInfo.setPassword("000000");  

        return "userInfo";  

     *  傳回List對象  

    public String returnList(){  

        userInfosList = new ArrayList<UserInfo>();  

        UserInfo u1 = new UserInfo();  

        u1.setUserId(10000);  

        u1.setUserName("張三");  

        u1.setPassword("000000");  

        UserInfo u2 = new UserInfo();  

        u2.setUserId(10001);  

        u2.setUserName("李四");  

        u2.setPassword("111111");  

        UserInfo u3 = new UserInfo();  

        u3.setUserId(10002);  

        u3.setUserName("王五");  

        u3.setPassword("222222");  

        UserInfo u4 = new UserInfo();  

        u4.setUserId(10003);  

        u4.setUserName("趙六");  

        u4.setPassword("333333");  

        userInfosList.add(u1);  

        userInfosList.add(u2);  

        userInfosList.add(u3);  

        userInfosList.add(u4);  

        return "list";  

     *  傳回Map對象  

    public String returnMap(){  

        userInfosMap = new HashMap<String,UserInfo>();  

        userInfosMap.put(u1.getUserId()+"", u1);  

        userInfosMap.put(u2.getUserId()+"", u2);  

        userInfosMap.put(u3.getUserId()+"", u3);  

        userInfosMap.put(u4.getUserId()+"", u4);  

        return "map";  

     *  獲得對象,也就是通過表達獲得對象(異步的)  

     * </P>  

    public String gainUserInfo(){  

        System.out.println("使用者ID:"+userInfo.getUserId());  

        System.out.println("使用者名:"+userInfo.getUserName());  

        System.out.println("密碼:"+userInfo.getPassword());  

     * 獲得單個值就不用寫了和平常一樣  

3.  struts.xml

struts jquery json 異步加載

<?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="default" namespace="/" extends="json-default">   

        <action name="jsontest" class="struts2jsonjquery.test.action.JsonJqueryStruts2Action">   

            <!-- 傳回單個值的result -->   

            <result name="message" type="json"></result>   

            <!-- 傳回UserInfo對象的 -->   

            <result name="userInfo" type="json"></result>   

            <!-- 傳回List對象的 -->   

            <result name="list" type="json"></result>   

            <!-- 傳回Map對象的 -->   

            <result name="map" type="json"></result>   

        </action>   

    </package>   

</struts>  

struts jquery json 異步加載

<?xml version="1.0" encoding="UTF-8" ?>  

<!DOCTYPE struts PUBLIC  

    "http://struts.apache.org/dtds/struts-2.0.dtd">  

<struts>  

    <package name="default" namespace="/" extends="json-default">  

        <action name="jsontest" class="struts2jsonjquery.test.action.JsonJqueryStruts2Action">  

            <!-- 傳回單個值的result -->  

            <result name="message" type="json"></result>  

            <!-- 傳回UserInfo對象的 -->  

            <result name="userInfo" type="json"></result>  

            <!-- 傳回List對象的 -->  

            <result name="list" type="json"></result>  

            <!-- 傳回Map對象的 -->  

            <result name="map" type="json"></result>  

        </action>  

    </package>  

前台:

1.  index.jsp

struts jquery json 異步加載

<%@ page language="java" pageEncoding="GBK"%>  

<%   

    String path = request.getContextPath();   

%>  

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  

<html>  

  <head>  

    <title>Struts2+JQuery+JSON</title>  

    <meta http-equiv="pragma" content="no-cache">  

    <meta http-equiv="cache-control" content="no-cache">  

    <meta http-equiv="expires" content="0">       

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  

    <meta http-equiv="description" content="This is my page">  

    <script type="text/javascript" src="<%=path %>/js/jquery.js"></script>  

    <script type="text/javascript" src="<%=path %>/js/json.js"></script>  

  </head>  

  <body>  

    <input id="getMessage" type="button" value="擷取單個值"/>     

    <input id="getUserInfo" type="button" value="擷取UserInfo對象"/>     

    <input id="getList" type="button" value="擷取List對象"/>     

    <input id="getMap" type="button" value="擷取Map對象"/>     

    <br>  

    <!-- 要顯示資訊的層 -->  

    <div id="message"></div>  

    <form>  

        使用者ID:<input name="userInfo.userId" type="text"/><br/>  

        使用者名:<input name="userInfo.userName" type="text"/><br/>  

        密   碼:<input name="userInfo.password" type="text"/><br>  

        <input id="regRe" type="button" value="注冊"/>  

    </form>  

  </body>  

</html>  

struts jquery json 異步加載

<%  

    String path = request.getContextPath();  

    <meta http-equiv="expires" content="0">      

    <input id="getMessage" type="button" value="擷取單個值"/>    

    <input id="getUserInfo" type="button" value="擷取UserInfo對象"/>    

    <input id="getList" type="button" value="擷取List對象"/>    

    <input id="getMap" type="button" value="擷取Map對象"/>    

2. json.js

struts jquery json 異步加載

//初始加載頁面時   

$(document).ready(function(){   

 //為擷取單個值的按鈕注冊滑鼠單擊事件   

 $("#getMessage").click(function(){   

  $.getJSON("jsontest!returnMessage.action",function(data){   

   //通過.操作符可以從data.message中獲得Action中message的值   

   $("#message").html("<font color='red'>"+data.message+"</font>");   

  });   

 });   

 //為擷取UserInfo對象按鈕添加滑鼠單擊事件   

 $("#getUserInfo").click(function(){   

  $.getJSON("jsontest!returnUserInfo.action",function(data){   

   //清空顯示層中的資料   

   $("#message").html("");   

   //為顯示層添加擷取到的資料   

   //擷取對象的資料用data.userInfo.屬性   

   $("#message").append("<div><font color='red'>使用者ID:"+data.userInfo.userId+"</font></div>")   

          .append("<div><font color='red'>使用者名:"+data.userInfo.userName+"</font></div>")   

          .append("<div><font color='red'>密碼:"+data.userInfo.password+"</font></div>")   

 //為擷取List對象按鈕添加滑鼠單擊事件   

 $("#getList").click(function(){   

  $.getJSON("jsontest!returnList.action",function(data){   

   //使用jQuery中的each(data,function(){});函數   

   //從data.userInfosList擷取UserInfo對象放入value之中   

   $.each(data.userInfosList,function(i,value){   

    $("#message").append("<div>第"+(i+1)+"個使用者:</div>")   

       .append("<div><font color='red'>使用者ID:"+value.userId+"</font></div>")   

          .append("<div><font color='red'>使用者名:"+value.userName+"</font></div>")   

          .append("<div><font color='red'>密碼:"+value.password+"</font></div>");   

   });   

 //為擷取Map對象按鈕添加滑鼠單擊事件   

 $("#getMap").click(function(){   

  $.getJSON("jsontest!returnMap.action",function(data){   

   //key值為Map的鍵值   

   $.each(data.userInfosMap,function(key,value){   

    $("#message").append("<div><font color='red'>使用者ID:"+value.userId+"</font></div>")   

 //向伺服器發送表達資料   

 $("#regRe").click(function(){   

  //把表單的資料進行序列化   

  var params = $("form").serialize();   

  //使用jQuery中的$.ajax({});Ajax方法   

  $.ajax({   

   url:"jsontest!gainUserInfo.action",   

   type:"POST",   

   data:params,   

   dataType:"json",   

   success:function(data){   

    //清空顯示層中的資料   

   }   

});  

struts jquery json 異步加載

//初始加載頁面時  

$(document).ready(function(){  

 //為擷取單個值的按鈕注冊滑鼠單擊事件  

 $("#getMessage").click(function(){  

  $.getJSON("jsontest!returnMessage.action",function(data){  

   //通過.操作符可以從data.message中獲得Action中message的值  

   $("#message").html("<font color='red'>"+data.message+"</font>");  

  });  

 });  

 //為擷取UserInfo對象按鈕添加滑鼠單擊事件  

 $("#getUserInfo").click(function(){  

  $.getJSON("jsontest!returnUserInfo.action",function(data){  

   //清空顯示層中的資料  

   $("#message").html("");  

   //為顯示層添加擷取到的資料  

   //擷取對象的資料用data.userInfo.屬性  

   $("#message").append("<div><font color='red'>使用者ID:"+data.userInfo.userId+"</font></div>")  

          .append("<div><font color='red'>使用者名:"+data.userInfo.userName+"</font></div>")  

          .append("<div><font color='red'>密碼:"+data.userInfo.password+"</font></div>")  

 //為擷取List對象按鈕添加滑鼠單擊事件  

 $("#getList").click(function(){  

  $.getJSON("jsontest!returnList.action",function(data){  

   //使用jQuery中的each(data,function(){});函數  

   //從data.userInfosList擷取UserInfo對象放入value之中  

   $.each(data.userInfosList,function(i,value){  

    $("#message").append("<div>第"+(i+1)+"個使用者:</div>")  

       .append("<div><font color='red'>使用者ID:"+value.userId+"</font></div>")  

          .append("<div><font color='red'>使用者名:"+value.userName+"</font></div>")  

          .append("<div><font color='red'>密碼:"+value.password+"</font></div>");  

   });  

 //為擷取Map對象按鈕添加滑鼠單擊事件  

 $("#getMap").click(function(){  

  $.getJSON("jsontest!returnMap.action",function(data){  

   //key值為Map的鍵值  

   $.each(data.userInfosMap,function(key,value){  

    $("#message").append("<div><font color='red'>使用者ID:"+value.userId+"</font></div>")  

 //向伺服器發送表達資料  

 $("#regRe").click(function(){  

  //把表單的資料進行序列化  

  var params = $("form").serialize();  

  //使用jQuery中的$.ajax({});Ajax方法  

  $.ajax({  

   url:"jsontest!gainUserInfo.action",  

   type:"POST",  

   data:params,  

   dataType:"json",  

   success:function(data){  

    //清空顯示層中的資料  

   }  

 注意:JSON插件會把所有包含getter方法的屬性都序列化到傳回結果中,是以Action中的其他execute方法都不要把名

       字加get字首。

可以下載下傳工程檔案

下載下傳次數: 1853