zoukankan      html  css  js  c++  java
  • Struts2+JQuery+JSON实现异步交互

    Struts2+JQuery+JSON实现异步交互,包括从后台获得单个值、对象、List和Map数据并从前台的表达中获取值把值进行序列化通过JQuery的$.ajax({})传到后台和后台的对象进行绑定。

    第一步:在MyEclipse中创建JavaWeb工厂并把Struts2 和 json的jar包添加到工程中添加完成后的工程图是:

    第二步:创建后台:

      1. UserInfo实体类:

    Userinfo实体类代码: 
    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类

    action类代码:

    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>
         *     返回单个值
         * <p>
         * @return
         */
        public String returnMessage(){
            this.message = "成功返回单个值";
            return "message";
        }
        /**
         * <p>
         *     返回UserInfo对象
         * </p>
         * @return
         */
        public String returnUserInfo(){
            userInfo = new UserInfo();
            userInfo.setUserId(10000);
            userInfo.setUserName("张三");
            userInfo.setPassword("000000");
            return "userInfo";
        }
        /**
         * <p>
         *     返回List对象
         * </p>
         * @return
         */
        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";
        }
        /**
         * <p>
         *     返回Map对象
         * </p>
         * @return
         */
        public String returnMap(){
            userInfosMap = new HashMap<String,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");
            userInfosMap.put(u1.getUserId()+"", u1);
            userInfosMap.put(u2.getUserId()+"", u2);
            userInfosMap.put(u3.getUserId()+"", u3);
            userInfosMap.put(u4.getUserId()+"", u4);
            return "map";
        }
        /**
         * <p>
         *     获得对象,也就是通过表达获得对象(异步的)
         * </P>
         * @return
         */
        public String gainUserInfo(){
            System.out.println("用户ID:"+userInfo.getUserId());
            System.out.println("用户名:"+userInfo.getUserName());
            System.out.println("密码:"+userInfo.getPassword());
            return "userInfo";
        }
        /**
         * 获得单个值就不用写了和平常一样
         */
    }

    3、struts.xml

     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="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>

    前台:

    1.  index.jsp

    Html代码
    <%@ 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="获取单个值"/>&nbsp;&nbsp;
        <input id="getUserInfo" type="button" value="获取UserInfo对象"/>&nbsp;&nbsp;
        <input id="getList" type="button" value="获取List对象"/>&nbsp;&nbsp;
        <input id="getMap" type="button" value="获取Map对象"/>&nbsp;&nbsp;
        <br>
        <br>
        <br>
        <!-- 要显示信息的层 -->
        <div id="message"></div>
        <form>
            用户ID:<input name="userInfo.userId" type="text"/><br/>
            用户名:<input name="userInfo.userName" type="text"/><br/>&nbsp;&nbsp;&nbsp;码:<input name="userInfo.password" type="text"/><br>
            <input id="regRe" type="button" value="注册"/>
        </form>
      </body>
    </html>

    2. json.js

    Js代码:
    //初始加载页面时
    $(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){
       //清空显示层中的数据
       $("#message").html("");
       //使用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){
       //清空显示层中的数据
       $("#message").html("");
       //使用jQuery中的each(data,function(){});函数
       //从data.userInfosList获取UserInfo对象放入value之中
       //key值为Map的键值
       $.each(data.userInfosMap,function(key,value){
        $("#message").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>");
       });
      });
     });
     //向服务器发送表达数据
     $("#regRe").click(function(){
      //把表单的数据进行序列化
      var params = $("form").serialize();
      //使用jQuery中的$.ajax({});Ajax方法
      $.ajax({
       url:"jsontest!gainUserInfo.action",
       type:"POST",
       data:params,
       dataType:"json",
       success: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>")
       }
      });
     });
    });
  • 相关阅读:
    Java Volatile keyword
    解决 The &#39;InnoDB&#39; feature is disabled; you need MySQL built with &#39;InnoDB&#39; to have it working
    【玩转cocos2d-x之三十九】Cocos2d-x 3.0截屏功能集成
    【DP】UVA 624 CD 记录路径
    ns3加入模块之vanet-highway
    awk向脚本传递參数(二)
    【传递正能量】献给默默追梦的人
    算法(第四版)学习笔记之java实现可以动态调整数组大小的栈
    Webstorm/IntelliJ Idea 过期破解方法
    CenterOS下安装NodeJS
  • 原文地址:https://www.cnblogs.com/564085446java/p/3729840.html
Copyright © 2011-2022 走看看