【转】Struts2中json插件的使用
配置注意点:
- 在原有Struts2框架jar包的引入下,需要额外多加一个Json的插件包(struts2-json-plugin-2.3.7.jar)
- 在struts.xml配置文件中,包需要继承json-default,然后把result的类型改为json
<package name="xxx" extends="json-default">
<result name="success" type="json"></result>
一、先来个简单示例,利用Struts2+jQuery+JSON实现异步交互,返回一个字符串
1、index.jsp
很简单的一个页面,利用Ajax异步向test1.action发送一个post请求,传递了一个参数name,然后把回调函数返回的值显示在页面。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.4.4.min.js"></script><script type="text/javascript">$("document").ready(function(){$.post("test1.action",{"name":"Balla_兔子"},function(data){console.info(data);$("#info").html(data.info);});});</script></head><body>Hello,Struts2!<div id="info"></div></body> </html>
2、TestAction.java
因为页面发送了一个参数名为name的参数,在这边我们用属性注入的方式,给成员变量一个setter方法赋值,返回提供了一个getter方法作为回调函数的返回值。
Struts2的Json插件,默认将值栈(root)的顶端对象返回(所有getter方法),在没有实现模型驱动类ModelDriven的前提下,值栈的顶端对象为Action(也就是返回Action里所有的getter方法,若有各别方法不想返回,只需要在该方法的上面添加一个@JSON(serialize=false)注解即可)
如:
@JSON(serialize=false) public String getAge() {return "我今年10岁了"; }
package com.lcw.struts.json; import com.opensymphony.xwork2.ActionSupport; public class TestAction extends ActionSupport {private String name; private String info;public String getInfo() {return "我是:"+name;}public void setName(String name) {this.name = name;}public String test1() {return "success";} }
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.i18n.encoding" value="UTF-8"/><constant name="struts.devMode" value="true" /><package name="strutsjson" extends="json-default" namespace="/"><action name="test1" class="com.lcw.struts.json.TestAction"><result name="success" type="json">/index.jsp</result></action></package> </struts>
下面是页面效果:(这里只是简单举例,也可以实现一些业务逻辑功能,比如验证用户的账号,可以在Action调用持久层的数据查询,返回布尔值,在回调函数里进行进一步操作)
二、下面来说下关于更为实用的实例,比如如何返回一个List集合,对象等复杂数据,在前台接受数据中,只能识别字符类型的信息,比如Xml,Json,Html字符等,是无法识别List集合的,那我们应该怎么做呢?
TestAction.java
这次在Action加入了模型驱动类,然后定义了一个User类并提供了setter和getter方法,把该对象添加到一个List集合里去,并提供getter方法以便返回数据。
package com.lcw.struts.json; import java.util.ArrayList; import java.util.List; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class TestAction extends ActionSupport implements ModelDriven<User> {private User user = new User();public User getModel() {return user;}private List<User> list;public List<User> getList() {return list;}public String test1(){list = new ArrayList<User>();User user = new User();list.add(new User("1", "张三"));list.add(new User("2", "李四"));return "success";} }
User.java
package com.lcw.struts.json; public class User {private String id;private String name;public User() {}public User(String id, String name) {super();this.id = id;this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;} }
保持配置文件不变,我们来看页面看看结果:
打开firebug调试查看,会发现
为何传递过来的数据会为空呢?不知道大家是否留意上文提到的一句话
Struts2的Json插件,默认将值栈(root)的顶端对象返回(所有getter方法),在没有实现模型驱动类ModelDriven的前提下,值栈的顶端对象为Action(也就是返回Action里所有的getter方法)
我们上面实现了模型驱动类,也就意味着值栈的栈顶对象此时也不再是Action了,而是Model,所以返回的数据为空。那要怎么办呢?其实很简单,只需要我们改变默认返回的栈顶对象就可以了,把它设置成Action。
<?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.i18n.encoding" value="UTF-8"/><constant name="struts.devMode" value="true" /><package name="strutsjson" extends="json-default" namespace="/"><action name="test" class="com.lcw.struts.json.TestAction" method="test1"><result name="success" type="json"><param name="root">action</param></result></action></package> </struts>
只要在result里添加一个参数root并设置成action就可以了,我们来看下此时的效果:
这是我们就可以利用(data.list[x].name等)取出其中的数据了。
那我们可不可以不要一起把所有的数据都返回回来,只返回部分数据呢?除了之前说的那个Json注解(只要@JSON注解,属性将永远不能参与 json返回),其实Struts2为我们也提供一个更灵活的方法,在struts.xml的配置文件里,我们也是可以根据所需设置的,例如:
<param name="includeproperties">list\[\d+\]\.name</param>
includeProperties代表要包含的参数,值为正则表达式,因为返回的数据是一个list集合,名为list则 list[\d+].name(代表list下所有数组索引下的name属性) 上文的反斜杠是转义符号。(如果要返回模型驱动对象则是model[\d+])
下面是完整配置文件:
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.i18n.encoding" value="UTF-8"/><constant name="struts.devMode" value="true" /><package name="strutsjson" extends="json-default" namespace="/"><action name="test" class="com.lcw.struts.json.TestAction" method="test1"><result name="success" type="json"><param name="root">action</param><param name="includeproperties">list\[\d+\]\.name</param></result></action></package> </struts>
再看下此时的页面数据返回:
这样,我们想要的数据就可以筛选出来了。
原链接:http://www.cnblogs.com/lichenwei/p/3925588.html
转载于:https://www.cnblogs.com/fengmingyue/p/6160216.html
【转】Struts2中json插件的使用相关推荐
- struts2的json插件配置详解
2019独角兽企业重金招聘Python工程师标准>>> 为了方便ajax调用传输数据,在struts2中加入的json插件用来做对象的序列化和反序列化,json插件的下载地址 htt ...
- android中json插件,【Android原生插件】package.json中关于第三方aar的配置
按照文档(https://ask.dcloud.net.cn/article/35414)所说: dependencies节点特殊说明 android插件中集成的第三方SDK 如果是jar或so放入到 ...
- 关于Strut2内置Json插件的使用
配置注意点: 在原有Struts2框架jar包的引入下,需要额外多加一个Json的插件包(struts2-json-plugin-2.3.7.jar) 在struts.xml配置文件中,包需要继承js ...
- java struts json_struts2的json插件配置详解(附demo)
为了方便ajax调用传输数据,在struts2中加入的json插件用来做对象的序列化和反序列化,json插件的下载地址 1. 下载json插件包,将jar包拷贝到WEB-INF/lib目录 注:str ...
- Struts2返回JSON数据的具体应用范…
Struts2返回JSON数据的具体应用范例 博客分类: Struts2 Struts2JSON 早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具 ...
- 深入了解Struts2返回JSON数据的原理及具体应用范例
来源:http://yshjava.iteye.com/blog/1333104 早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具体应用了,但苦于一 ...
- Struts2返回Json数据(使用Struts2插件)
这篇我将介绍如何使用Struts2的struts2-json-plugin.jar插件返回JSON数据. 一.其中主要步骤有: 1.将struts2-json-plugin.jar插件拷贝到项目的&q ...
- Struts2中采用Json返回List对象数据为空解决方案
Struts2中采用Json返回List对象数据为空解决方案 参考文章: (1)Struts2中采用Json返回List对象数据为空解决方案 (2)https://www.cnblogs.com/wa ...
- 使用struts2中的codebehind插件
codebehind plugin是一个可以简化struts2配置的插件,虽然不能实现完全意义上的codebehind,至少已经做的不错了,期待新版本:-D 使用步骤: 1.确保你的应用已经可以 ...
最新文章
- layui表格获取不到多层数据的解决方案
- ios中通过调试来使用私有api
- python安装pyquery失败
- powershell 运行策略
- oracle 数据操作的相关参数
- 梁鑫:重构 - 在美股行情系统的实践
- ubuntu下编译linux内核
- 模拟admin组件自己开发stark组件之创建篇
- html5自定义组件样式,Taro 自定义组件样式不生效及解决方案
- linux中找到最耗CPU的那段Java代码
- springside4例子
- pku2352 Stars(线段树实现)
- SpringClould之应用层鉴权Oauth2
- mapbox地图点位图像更新
- vue使用富文本编辑器vue-quill-editor
- Vue 接入firebase验证、Google登陆、Facebook登陆完整流程
- Mortal Kombat Tower (dp动态规划)
- HDU 6438 Buy and Resell (优先队列 or 贪心)
- 如何编制试算平衡表_会计试算平衡表怎么编制
- Python画美队盾牌
热门文章
- NO.30 禅道项目管理软件扩展机制简介
- RSYNC安装使用详解
- HOW TO: Troubleshoot development errors in MOSS 2007
- php空间 数据库设计,php进阶之数据库设计/ 选择合适的表引擎
- sql linux 160天,Ubuntu下用脚本执行sql语句(sqlite)
- Pytest之skip、skipif、xfail
- 软件测试经典面试题(二)给你一个网站如何测试
- Graph Structure of Neural Networks何凯明团队
- 加密钱包和借记卡提供商Swipe即将发布V2版本
- SAP License:CO07利润中心必输