Fork me on GitHub

Struts2(十六)Json

一、JSON

Json就是浏览器和服务器之间交换数据的一种轻量级对象

 javaSctipt中类似的对象操作

$(function() {
            var person = {
                "name" : "张三",
                "age" : 21,
                "wife" : "李四"
            };
            $("#msg").append("姓名:" + person.name+"<br/>").append("年龄:" + person.age+"<br/>")
                    .append("老婆:" + person.wife+"<br/>");
        })

二、一个小例子

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>json测试</title>
<script type="text/javascript" src="js/jquery-1.8.2.js"></script>
<script type="text/javascript" src="js/jsonDemo.js"></script>
<style type="text/css">
td {
border: 1px solid blue;
width:100px;
}
</style>
</head>
<body>

<div id="msg"></div>
<div id="msg2"></div>
<div id="msg3"></div>
<input id="btn" type="button" value="JSON与字符串转换" /><br/>
<input id="btn2" type="button" value="字符串与JSON转换" />
</body>
</html>
$(function() {
    // json对象
    var person = {
        "name" : "张三",
        "age" : 21,
        "wife" : "李四"
    };
    $("#msg").append("姓名:" + person.name + "<br/>").append("年龄:" + person.age
            + "<br/>").append("老婆:" + person.wife + "<br/>");

    // 数组
    var arr1 = ["广东", "广西", "湖南", "湖北", "江西"]
    // 使用循环遍历
    for (var i = 0; i < arr1.length; i++) {
        $("#msg2").append(arr1[i] + " ");
    }

    // 对象数组
    var users = [{
                "name" : "张三",
                "pwd" : "123qwe",
                "age" : 21
            }, {
                "name" : "李四",
                "pwd" : "asdf",
                "age" : 22
            }, {
                "name" : "王五",
                "pwd" : "fsde",
                "age" : 23
            }, {
                "name" : "赵六",
                "pwd" : "zcxe",
                "age" : 24
            }];

    $("#msg3").append("<table>");
    for (var i = 0; i < users.length; i++) {

        $("#msg3").append("<tr>").append("<td>" + users[i].name + "</td>").append("<td>"
                + users[i].pwd + "</td>").append("<td>" + users[i].age
                + "</td>").append("</tr>");
    }
    $("#msg3").append("</table>");

        // json和字符串转换
    $("#btn").bind("click",function(){
        alert(JSON.stringify(users))
        alert(typeof JSON.stringify(users))
    })
    //将字符串转换为对象
    var str='{"name":"张三丰","pwd":"qwer","age":123}'

    $("#btn2").bind("click",function(){
        alert(JSON.parse(str).name);
        //显示类型为string
        alert(typeof JSON.parse(str).name)
        alert(JSON.parse(str).pwd);
        alert(typeof JSON.parse(str).pwd)
        alert(JSON.parse(str).age);
        //显示类型为number
        alert(typeof JSON.parse(str).age)
    })
    
    
    })

三、服务器端设置和客户端使用Ajax请求

<param name="excludeProperties" >不包含的元素 </param>
<param name="includeProperties" >包含的元素 </param>
 <param name="root">
    person.job 字段或者对象
  </param>

 3.1、Ajax实现取重服务器端的数据

package com.pb.web.action;

import com.opensymphony.xwork2.ActionSupport;

public class DataAction extends ActionSupport {
    
    private String name;
    private String pwd;
    private Integer age;
    
    
    public String getData(){
        name="张三丰";
        pwd="太极宗师108";
        age=108;
        return SUCCESS;
    }


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public String getPwd() {
        return pwd;
    }


    public void setPwd(String pwd) {
        this.pwd = pwd;
    }


    public Integer getAge() {
        return age;
    }


    public void setAge(Integer age) {
        this.age = age;
    }

}

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="json-default">
    <action name="getData" class="com.pb.web.action.DataAction" method="getData">
    <result type="json">
    <!--默认返回Action中全部数据 param可以指定下要传的元素   -->
    <param name="includeProperties">
    name,pwd,age
    </param>
    </result>
    </action>
    </package>
</struts>

javascript

$(function() {

            $("#btn").click(function() {
                $.ajax({
                            url : "getData",
                            type : "post",
                            data : null,
                            dataType : "json",
                            success : function(data) {
                                $("#msg").html("");
                                $("#msg").append("姓名:" + data.name + "<br/>")
                                        .append("密码:" + data.pwd + "<br/>")
                                        .append("年龄:" + data.age + "<br/>")
                            },
                            error : function() {
                                $("#msg").html("");
                                $("#msg").html("获取数据失败");
                            }
                        });
            });
        });

页面

<input type="button" id="btn" value="Ajax获取Json" />
<div id="msg"></div>

四、返回对象和集合时

 

package com.pb.web.action;

import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.pb.entity.User;

public class DataAction extends ActionSupport {
    
    private String name;
    private String pwd;
    private Integer age;
    private User user;
    private List<User> users;
    
    
    public String getData(){
        name="张三丰";
        pwd="太极宗师108";
        age=108;
        return SUCCESS;
    }
    public String getUserString(){
        user=new User(1, "乔丹", "123", 40);
        return SUCCESS;
    }

    public String getUsersString(){
        users=new ArrayList<User>();
        users.add(new User(1, "乔丹", "123", 40));
        users.add(new User(2, "科比", "123", 36));
        users.add(new User(3, "C罗", "123", 25));
        return SUCCESS;
    }

    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public String getPwd() {
        return pwd;
    }


    public void setPwd(String pwd) {
        this.pwd = pwd;
    }


    public Integer getAge() {
        return age;
    }


    public void setAge(Integer age) {
        this.age = age;
    }


    public User getUser() {
        return user;
    }


    public void setUser(User user) {
        this.user = user;
    }
    public List<User> getUsers() {
        return users;
    }
    public void setUsers(List<User> users) {
        this.users = users;
    }

}

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="json-default">
    <action name="getData" class="com.pb.web.action.DataAction" method="getData">
    <result type="json">
    默认返回Action中全部数据 param可以指定下要传的元素  
    <param name="includeProperties">
    name,pwd,age
    </param>
    </result>
    </action>
    <action name="getUser" class="com.pb.web.action.DataAction" method="getUserString">
    <result type="json">
<!--     默认返回Action中全部数据 param可以指定下要传的元素  
    <param name="root"> ajax接收直接data.属性就可以
    user
    </param> -->
    <param name="includeProperties">user.*</param>
    <!--  使用 对象.*时接收时ajax要用 date.user.属性才可以-->
    </result>
    </action>
    <action name="getUsers" class="com.pb.web.action.DataAction" method="getUsersString">
    <result type="json">
    <!-- 默认返回Action中全部数据 param可以指定下要传的元素   -->
    <!--  --><!--  ajax接收直接 data.length遍历时取值使用data[i].属性就可以 -->
<!--     <param name="root">
    users
    </param>  -->
     <param name="includeProperties">users.*</param>
    <!--  使用 对象.*时接收时ajax要用 date.users.length 取值时使用date.users[i].属性才可以 -->
    </result> 
    </action>
    </package>
</struts>

javascript

$(function() {

    $("#btn").click(function() {
        $.ajax({
                    url : "getData",
                    type : "post",
                    data : null,
                    dataType : "json",
                    success : function(data) {
                        $("#msg").html("");
                        $("#msg").append("姓名:" + data.name + "<br/>")
                                .append("密码:" + data.pwd + "<br/>")
                                .append("年龄:" + data.age + "<br/>")
                    },
                    error : function() {
                        $("#msg").html("");
                        $("#msg").html("获取数据失败");
                    }
                });
    });
    // 获取用户对象
    $("#btn2").click(function() {
        $.ajax({
                    url : "getUser",
                    type : "post",
                    data : null,
                    dataType : "json",
                    success : function(data) {
                        $("#msg2").html("");
                        $("#msg2").append("ID:" + data.user.id + "<br/>")
                                .append("姓名:" + data.user.username + "<br/>")
                                .append("密码:" + data.user.password + "<br/>")
                                .append("年龄:" + data.user.age + "<br/>")
                    },
                    error : function() {
                        $("#msg2").html("");
                        $("#msg2").html("获取数据失败");
                    }
                });
    });
    // 获取对象集合
    $("#btn3").click(function() {
        $.ajax({
                    url : "getUsers",
                    type : "post",
                    data : null,
                    dataType : "json",
                    success : function(data) {
                        $("#msg3").html("");
                        $("#msg3").append("<tabel>");
                        for (var i = 0; i < data.users.length; i++) {
                            $("#msg3")
                                    .append("<tr>")
                                    .append("<td>" + data.users[i].id + "</td>")
                                    .append("<td>" + data.users[i].username
                                            + "</td>")
                                    .append("<td>" + data.users[i].password + "</td>")
                                    .append("<td>" + data.users[i].age
                                            + "</td>").append("</tr>");
                        }
                        $("#msg3").append("<tabel>");
                    },
                    error : function() {
                        $("#msg3").html("");
                        $("#msg3").html("获取数据失败");
                    }
                });
    });
});

 

五、无刷新页页登录和注销

 

package com.pb.entity;
/*
 * 用户实体类
 */
public class User {
    
    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;
    }
    

}
package com.pb.web.action;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;
import com.pb.entity.User;

public class UserAction extends ActionSupport implements SessionAware {
        private User user;
        private Map<String, Object> session;
        private boolean flag;
        
        //登录的验证方法
        public String login(){
            if(user.getUsername().equals("accp")&&user.getPassword().equals("accp")){
                //如果用户名和密码都正确,将这个用户放入Session中
                session.put("u", user);
                flag=true;
            }else{
                flag=false;
            }
            
            return SUCCESS;
        }
        /*
         * 退出
         */
        public String logout(){
            session.remove("user");
            return SUCCESS;
        }
        
        //实现sesssionAware接口的方法
    @Override
    public void setSession(Map<String, Object> session) {
        this.session=session;

    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
    public Map<String, Object> getSession() {
        return session;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }


}

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="json-default">
    <action name="login" class="com.pb.web.action.UserAction" method="login">
    <result type="json">
    <param name="includeProperties">
    flag,user.*
    </param>
    </result>
    </action>
    <action name="logout" class="com.pb.web.action.UserAction" method="logout">
    <result type="json">
    <param name="includeProperties">
    null
    </param>
    </result>
    </action>
    </package>
</struts>

页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
<script type="text/javascript" src="js/jquery-1.8.2.js"></script>
<script type="text/javascript" src="js/loginDemo.js"></script>
</head>
<body>
<div id="loginDiv">
用户名:<input type="text" name="name" /><br/>
密码:<input type="password"  name="password"/><br/>
<input type="button" value="登录" id="loginbtn" />
<span id="msg"></span>
</div>
</body>
</html>

js

/**
 * 登录页面js
 */
$(function() {
            $("#loginbtn").click(function() {
                var params = {
                    "user.username" : $("input[name='name']").val(),
                    "user.password" : $("input[name='password']").val()
                }
                $.ajax({
                            url : "login.action",
                            type : "post",
                            data : params,
                            dataType : "json",
                            success : function(data) {
                                // alert(data.flag);
                                if (data.flag == true) {
                                    $("#loginDiv")
                                            .html("")
                                            .append("欢迎您!")
                                            .append(data.user.username)
                                            .append("<input id='logoutbtn' type='button' value='注销' />")
                                } else {
                                    $("#msg").html("")
                                    $("#msg").append("用户名或者密码错误 !").css(
                                            "color", "#FF0000")
                                }

                            },
                            error : function() {
                                $("#msg").html("")
                                $("#msg").append("登录异常!").css("color",
                                        "#FF0000");
                            }
                        });
            });
            $("#logoutbtn").live("click",function(){
            $.ajax({
                url:"logout",
            type:"post",
            dataType:"json",
            success:function(data){
                //alert(JSON.stringify(data));
                $("#loginDiv").html("");
                $("#loginDiv").append('用户名:<input type="text" id="username" value="">密码:<input type="password" id="password" value=""><input type="button" value="登录" id="btn"><span id="msg"></span>');
            },
            error:function(){
                alert("ajax请求失败");
            }
                
            });    
            });
        });

 

posted @ 2015-04-04 21:15  森林森  阅读(671)  评论(2编辑  收藏  举报