struts2 使用ajax 传递json数据
2016-01-16 13:01
961 查看
先搭建一个struts2的项目,在lib目录下导入struts2开发的基础包,即必须要的。一定要先下载一个版本的全部struts2jar包,然后从这个包里面逐一添加所需要的包,不能需要哪个包然后从网上下载,下一次需要另一个包又从另一个网下载,这样可能会导致各个包由于版本问题而导致冲突报错,很难解决。
然后是代码。
web.xml:
先说要加入的与json有关的jar包:
1.json-lib-2.4-jdk15.jar,这是java代码中把java对象转化为json字符串所需要的包,当然这个jar本身也会有一些依赖的jar要导入,根据具体的jar导入情况补充加入即可。
使用这个包的JSONObject对象的方法可以把一个对象转化为一个json string传给前台,只有转化为json string的对象才能在前台的js中解析数据,否则,如果直接传输java对象,前台是知道这是一个Object类型的东西,但不知道它具体的数据是什么,也就是说没法解析。关于这一点我们可以在AjaxAction中看到,我会向前台传一个map对象,我同时传了map这个java对象,也传了map使用JSONObject转化以后生成的json格式的string对象,即我命名为js的对象,最后我在前台查看时,发现map无法解析,只是一个object,而js则显示为一个map的字符串格式的对象,里面的数据可以解析。
如下图:
只有经过JSONObject对象处理的java对象,前台的js才可以解析。
2.struts2-json-plugin-2.3.16.1.jar包,这个包是用于struts2对与json的支持的。这个jar要与之前的struts2jar版本统一,否则可能报错,最好从之前下载的全部struts2jar里面复制出来。那么struts2对于json的支持体现在哪里呢?答案是strust.xml文件。
(1)处理ajax的action配置,必须放在继承自”json-default“包的packge下才可以,而这个json-default就是定义在struts2-json-plugin-2.3.16.1.jar里面。
(2)<result>标签的写法:
<result type="json"></result>如果是这样写的话,默认ajax会返回action中定义的全部带有getter方法的成员变量,前台使用的时候就“data.成员”即可 。
3.json2.js:
这个是一个前台解析json 数据的js库。也需要引入。为的是方便解析map等集合对象。简单的string或者int就不要了,主要针对集合对象,因为js前台拿到的是一个json字符串,解析起来比较复杂,而引入这个js文件就会方便一些。
最后附上项目源码的连接:
点击打开链接
然后是代码。
web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- 配置struts2为项目的controller --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>ajax.jsp</welcome-file> </welcome-file-list> </web-app>前台界面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <script type="text/javascript" src="/Struts2Ajax/js/jquery.min.js"></script> <script type="text/javascript" src="/Struts2Ajax/js/json2.js"></script> </head> <body> <input id="name" type="text"> <input id="msg" type="button" value="ok"> </body> <script type="text/javascript"> $(document).ready(function () { $("#msg").click(function () { var params = { name : $("#name").val(), }; $.ajax({ url:'ajaxRequest', type:'POST', data: params, dataType:'json', success:function (data) { alert(data.result); alert(data.jo.gg);//直接访问不行; console.log(data); var obj = JSON.parse(data.js); alert(obj.gg); } }); }); }); </script> </html>Action:
package com.ajax; import java.util.HashMap; import java.util.Map; import net.sf.json.JSONObject; public class AjaxAction { private String name; private JSONObject jo; private String result; private Map<String, String> map = new HashMap<>(); private int a = 1000000; private String js; public String getName() { return name; } // ajax请求参数赋值 public void setName(String name) { this.name = name; } // ajax返回结果 public String getResult() { return result; } public Map<String, String> getMap() { return map; } public void setMap(Map<String, String> map) { this.map = map; } public String execute() { this.result = "Hello! " + this.name + "."; int a=10; int b=100; map.put("gg", "gl"); map.put("1", "55"); map.put("2", "88"); jo = JSONObject.fromObject(map); js = jo.toString(); System.out.println(js); return "success"; } public int getA() { return a; } public void setA(int a) { this.a = a; } public String getJs() { return js; } public void setJs(String js) { this.js = js; } public JSONObject getJo() { return jo; } public void setJo(JSONObject jo) { this.jo = jo; } }struts.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <!--采用json数据格式,package的extends必须是extends="json-default"--> <package name="testAjax" extends="json-default"> <action name="ajaxRequest" class="com.ajax.AjaxAction"> <result type="json"> <param name="includeProperties">name,result,a,map,js,jo</param> </result> </action> <!--客户端请求(非动态调用)--> </package> </struts>下面逐一说明。
先说要加入的与json有关的jar包:
1.json-lib-2.4-jdk15.jar,这是java代码中把java对象转化为json字符串所需要的包,当然这个jar本身也会有一些依赖的jar要导入,根据具体的jar导入情况补充加入即可。
使用这个包的JSONObject对象的方法可以把一个对象转化为一个json string传给前台,只有转化为json string的对象才能在前台的js中解析数据,否则,如果直接传输java对象,前台是知道这是一个Object类型的东西,但不知道它具体的数据是什么,也就是说没法解析。关于这一点我们可以在AjaxAction中看到,我会向前台传一个map对象,我同时传了map这个java对象,也传了map使用JSONObject转化以后生成的json格式的string对象,即我命名为js的对象,最后我在前台查看时,发现map无法解析,只是一个object,而js则显示为一个map的字符串格式的对象,里面的数据可以解析。
如下图:
只有经过JSONObject对象处理的java对象,前台的js才可以解析。
2.struts2-json-plugin-2.3.16.1.jar包,这个包是用于struts2对与json的支持的。这个jar要与之前的struts2jar版本统一,否则可能报错,最好从之前下载的全部struts2jar里面复制出来。那么struts2对于json的支持体现在哪里呢?答案是strust.xml文件。
(1)处理ajax的action配置,必须放在继承自”json-default“包的packge下才可以,而这个json-default就是定义在struts2-json-plugin-2.3.16.1.jar里面。
(2)<result>标签的写法:
<result type="json"></result>如果是这样写的话,默认ajax会返回action中定义的全部带有getter方法的成员变量,前台使用的时候就“data.成员”即可 。
<result type="json"> <param name="includeProperties">name,result,a,map,js,jo</param> </result>而如果用上面的方式的话,就指定了ajax要返回的变量名称,它不会全部返回所有成员,而是写了哪几个就返回哪几个,具体定义在param标签里面,当然必须提供getter方法。
3.json2.js:
这个是一个前台解析json 数据的js库。也需要引入。为的是方便解析map等集合对象。简单的string或者int就不要了,主要针对集合对象,因为js前台拿到的是一个json字符串,解析起来比较复杂,而引入这个js文件就会方便一些。
var obj = JSON.parse(data.js); alert(obj.gg);只需要使用parse方法就可以将json string转化为js里的对象,省略了很多对string的操作,很方便。如上,data.js是我们map对象的json string格式,使用parse方法后,直接得到了map对象,就可以直接用map.key的形式来访问对象数据了。
最后附上项目源码的连接:
点击打开链接
相关文章推荐
- cmd运行java 找不到或无法加载主类的问题
- Java实现通过smtp服务器验证邮箱的真实有效性
- Struts2_ValueStack,OGNL详解
- 2、Java基础
- Spring下载方法
- JAVA文件监听
- 1、Java综述
- Struts2中的ModelDriven机制及其运用
- Java实现将选择题题库按照字母顺序重新排列
- SpringMVC返回文件流
- java中动态代理实现机制
- Struts2源码浅析-ConfigurationProvider
- Ubuntu14.04 JAVA环境配置
- Java Collection
- Java设计模式——静态代理设计模式
- ubuntu安装jdk全过程-转
- Java高级特性之枚举
- java泛型
- Java反射机制
- struts2的s:iterator 标签 详解