Struts2 ajax json小例子

1:首先要解决jar包的问题,我最近一直用maven搭建项目,所以把pom.xml复制到这。

要有struts2的核心包,struts2和Json整合的包,以及json lib。刚才转载了一篇解决json lib老是报错的博客,问题完美解决。

    <dependencies>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-json-plugin</artifactId>
            <version>2.3.28.1</version>
        </dependency>
        <dependency>
            <groupId>net.sf.ezmorph</groupId>
            <artifactId>ezmorph</artifactId>
            <version>1.0.6</version>
        </dependency>

        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.2.2</version>
            <classifier>jdk15</classifier>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <!-- 只在编译时和测试时运行 -->
            <scope>provided</scope>
        </dependency>
        <!-- Struts2 -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.3.24</version>
        </dependency>
    </dependencies>

2:login.jsp

先看看写好的表单,ajax一会再说吧。

<%@ 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>Login Page</title>
<script type="text/javascript" src="jquery-1.12.2.min.js"></script>
</head>
<body>
    <form action="#" method="post">

        ID: <input type="text" name="id" id="id" />
        <br/>
        Password:<input type="text" name="name" id="name"/>
        <br/>
        <input type="submit" value="Submit" id="submit" name="submit"/>

    </form>
    <script>

        function login(){
            var $btn = $("#submit");
            $btn.bind("click",function(){
                $.ajax({
                    type:"post",
                    url:"json.action",
                    data:{
                        id : $("#id").val(),
                        name : $("#name").val()
                    },
                    dataType:"json",
                    success:function(data){
                        var obj = eval ("(" + data + ")");
                        alert(obj.id);
                    },
                    error:function(){
                        alert("失败");
                    }
                });
            });
        };
        $(document).ready(function(){
            login();
        });
    </script>

</body>
</html>

3:JsonAction.

在这里我们采取模型驱动的方式获取表单传递过来的值,然后在后台输出一下,当然我重写了Student的toString方法,Student类就不再展示了。

我们在action里创建了一个map,map是一个键值对的形式,Map<String,Object>,抛开Struts2不谈,json也是一个键值对形式,JSON 数据的书写格式是:名称/值对。

我们可以用JsonObject.fromObject()方法创建一个JSONObject对象 

    public static JSONObject fromObject(Object object)
     {
       return fromObject(object, new JsonConfig());
     }

源码在这,明显是个static方法,我们用它获取对象。

然后我们把这个对象转换成字符串存到了一个变量中。我们可以在后面的struts.xml中看到这个字符串变量有什么用。

package com.oa.action;

import java.util.HashMap;
import java.util.Map;
import com.oa.entity.Student;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import net.sf.json.JSONObject;

public class JsonAction extends ActionSupport implements ModelDriven<Student> {
    private static final long serialVersionUID = 1L;
    private Student student = new Student();
    private String result;

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }

    /**
     *
     * 处理ajax请求
     *
     * @return SUCCESS
     *
     */
    @Override
    public String execute() {

        try {
            System.out.println(student);

            Map<String, Object> info=new HashMap<String,Object>();
            info.put("id", student.getId());
            info.put("name", student.getName());
            JSONObject object=JSONObject.fromObject(info);
            result=object.toString();

        } catch (Exception e) {

            e.printStackTrace();

        }
        return SUCCESS;
    }

    @Override
    public Student getModel() {
        if (student == null) {
            student = new Student();
        }
        return student;
    }

}

4:struts.xml

有几点是必须的,result的type是Json,有点像之前用的struts2的文件下载,type就说stream,我们能看到action里的字符串变量写在这里。我们把这个result返回给前端页面,当然,别忘记result的setter getter方法。

        <action name="json" class="com.oa.action.JsonAction">
            <result type="json">
                <param name="root">
                    result
                </param>
            </result>
        </action>

5:ajax

用的是jquery的ajax,要导入jquery的js文件,我用的是jquery-1.12.2.min.js。当然还有别的版本,用哪个都可以,去http://jquery.com/download/下载或者百度都可以。

url就说我们要提交到的action。data是要传递的参数,这里的id  name和我实体类Student的属性是对应的。如果能正确返回,就执行success后面的方法,如果失败了,就执行error后面的方法。

data是一个字符串,因为我们返回的是result就说一个字符串,不过这个字符串是由JsonObject对象转换来的。

var obj = eval ("(" + data + ")");是用Javascript解析器,来解析Json文本,有兴趣可以看看http://www.w3school.com.cn/json/json_eval.asp,这里有详细介绍。我只想说Json也是键值对形式。我们可到了obj,然后就跟map差不多,你用key就可以得到value。obj.id就可以得到我们输入的id
$.ajax({
                    type:"post",
                    url:"json.action",
                    data:{
                        id : $("#id").val(),
                        name : $("#name").val()
                    },
                    dataType:"json",
                    success:function(data){
                        var obj = eval ("(" + data + ")");
                        alert(obj.id);
                    },
                    error:function(){
                        alert("失败");
                    }
                });

6:页面效果

然而,我发现个问题,在Eclipse 里面没问题,能正常运行,在chrome里却不行,我又在搜狗里面试了试,也是可以的。

看来得研究研究为什么不能再chrome中运行了。

时间: 2024-12-05 07:14:10

Struts2 ajax json小例子的相关文章

struts2 + ajax + json的结合使用,实例讲解

struts2用response怎么将json值返回到页面javascript解析,这里介绍一个struts2与json整合后包的用法. 1.准备工作 ①ajax使用Jquery:jquery-1.4.2.min.js ②struts2与json的依赖包:struts2-json-plugin-2.2.3.jar PS:版本可自己控制!~ 2.过程 ①引入json依赖包 ②编写action类 ③配置struts.xml ④编写页面 ⑤测试 3.实例 ① action类,JsonAction  注

struts2+ajax+json使用实例

本文主要包含一个struts2+ajax+json的使用实例 步骤如下 1.准备工作 ①ajax使用Jquery:jquery-1.4.2.min.js ②struts2与json的依赖包:struts2-json-plugin-2.2.3.jar,json-lib PS:版本可自己控制!~ 2.过程 ①引入json依赖包 ②编写action类 ③配置struts.xml ④编写页面 ⑤测试 参考链接 struts2 + ajax + json的结合使用,实例讲解 - tfy1332的专栏 -

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环境不用多说了. 二.内容

struts2+ajax+json实现用户登录

实现的是异步刷新登录功能,返回出错信息时不刷新页面. 前端代码: <%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/

Django1.7+JQuery+Ajax集成小例子

Ajax的出现让Web展现了更新的活力,基本所有的语言,都动态支持Ajax与起服务端进行通信,并在页面实现无刷新动态交互. 下面是散仙使用Django+Jquery+Ajax的方式来模拟实现了一个验证用户注册时,用户名存在不存在的一个小应用.注意,验证存在不存在使用的是Ajax的方式,不用让用户点击按钮验证是否存在. 截图如下: 页面HTML代码如下: <!DOCTYPE html> <html> <head lang="en"> <meta

Struts2 ajax json使用介绍

一.jar包首先引入Struts和json所需的jar包. 二.前台代码 <body> <form id="myform"> <table> <tr> <td>姓名:</td> <td> <input type="text" name="name" /> </td> </tr> <tr> <td>性别:&

JS+Python(ajax+json)例子

提供基于js与python利用ajax传输json数据的部分示例: 在static文件js目录下: jquery.js st_goods.js HTML页面: <!DOCTYPE html> {% load staticfiles %} <html> <head>     <meta charset="utf-8">     <title>ECharts</title> </head> <body

json小例子

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="jquery.1.9.0.min.js"></script> </head> <body> <div class="

Ajax学习小例子

客户端: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><script type="text/javascript">window.onload = init;function init() {    var btn = document.getElementById(