1、使用Struts2自带Json数据支持。
如果页面采用Ajax请求数据,且希望Struts2返回Json数据那么可以采用Struts2自带的对Json的支持功能。Struts2对Json的支持主要是通过拦截器实现的,只需在Struts.xml中稍做配置,然后Action中遵守一定规则即
可。
①、配置Struts.xml文件如下:
<!-- 专门用于json数据处理的包,该包中的action支持响应json格式的字符串 --> <package name="jsonpak" namespace="/" extends="json-default"> <action name="studentJson" class="studentAction" method="queryStudentsJson"> <result name="studentList" type="json"></result><!--将action的bean属性以json字符串返回浏览器--> </action> </package>
注意,必需继承json-default包,result设置成json之后,容器会把action中所有以get开头的方法自动封装到一个json对象中(json拦截器来做,注意封装到json中的数据与action中的属性无关,只与get开头的方法有关,即使一个属性都没有,只要有get开头的方法,struts都会正常封装json字符串),然后调用js的callback方法,返回json数据。
②、在对应的Action的方法中将处理后的数据放置到对应的类属性用,并且属性提供get方法,即可。对于上面的配置,在方法queryStudentsJson中将需要返回的数据对象赋给类属性(有对应的get方法)后,返回到
studentList结果视图中即可(return "studentList")。
2、Struts2支持Jons所需Jar包。
使用Struts2的Json支持功能,需要的jar包有:commons-lang-2.4.jar;json-lib-2.3-jdk13.jar;jsonplugin-0[1].32.jar;ezmorph-1.0.2.jar;commons-beanutils-1.7.0.jar。
3、使用Struts2自带Json支持功能的全部数据Json化问题。
按照上面实现json处理后,会出现一个问题,struts2的拦截器会将Action类中所有的get方法都格式化到Josn字符串中,而在实际需求中,可能只需要部分数据,这时可以采用xml配置或者注解功能,实现筛选控制,这样可以有选择的格式化部分数据到json字符串中。
①、配置Struts.xml文件实现:action标签的子标签result中提供了一些参数解决这个问题,一般情况下用的最多的就是includeProperties 参数和excludeNullProperties参数。
includeProperties 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。这个参数直接返回对象的json数据,前台不需要eval转换,<param name="root">result</param>则不同,需要前台进行eval转换如:输出data对象下面的所有属性 和 总条数。 <result type="json"> <param name="includeProperties">totalCount,data.*</param> </result> excludeProperties 参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties 更多配置参考如下: <result type="json"> <!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 --> <!-- 默认将会序列所有有返回值的getter方法的值,而无论该方法是否有对应属性 --> <param name="root">dataMap</param> <!-- 指定是否序列化空的属性 --> <param name="excludeNullProperties">true</param> <!-- 这里指定将序列化dataMap中的那些属性 --> <param name="includeProperties">userList.*</param> <!-- 这里指定将要从dataMap中排除那些属性,这些排除的属性将不被序列化,一半不与上边的参数配置同时出现 --> <param name="excludeProperties">SUCCES</param> </result>
②、在action中的get方法上加注解。
默认情况下以get方法开头的都会序列化,如果不想序列化,在action中的相应get方法要打上注解@JSON(serialize=false) 如果在属性get方法上面加@JSON(name="newName"),则返回的json数据中名称是指定的新名称。 @JSON(format ="yyyy-MM-dd'T'HH:mm:ss")设置用于格式化输出、解析日期表单域的格式。 @JSON(deserialize=true)设置是否反序列化该属性
4、 使用json功能,报如下错误。
Class com.googlecode.jsonplugin.JSONWriter can not access a member of class* Class org.apache.struts2.json.JSONWriter can not access a member of class oracle.jdbc.driver.BaseResultSet with modifiers "public"
上面的错误是初使用Struts2的json功能的开发人员经常遇到的。
错误含义:不能把程序中的某种数据结构串行化成json格式。
原因:struts2的action里面的数据转换成json数据时,会将提供了get方法的属性都串行化输出JSON到客户端。有的时候,很多属性并不能串行化成json数据,比如这里的oracle.jdbc.driver.BaseResultSet。这时还进行强行转换就会出现这样的异常。
解决方法:在不能串行化到json的属性相应的get方法前加一条json标记 @JSON(serialize=false)。告诉json不需要转化这个属性。或者根本不写这个get方法。
5、自实现Json数据返回
不采用Struts2自带的Json功能,直接操作response对象实现json格式数据返回,这样不但简单,而且回避了上面的各种问题。
①、Struts.xml中不再需要特殊配置,直接继承struts-default包即可,参考如下:
<!-- 处理学生信息的action --> <action name="pageQuery" class="classAction" method="pageQueryClasses"> </action> <action name="createClass" class="classAction" method="createClass"> </action> <action name="updateClass" class="classAction" method="updateClass"> </action> <action name="deleteClassById" class="classAction" method="deleteClassById"> </action> <action name="getClassById" class="classAction" method="getClassById"> </action> </package>
action标签中不再需要result子标签,在Action对应的方法中直接返回null即可。
public class ClassAction extends BaseAction implements ModelDriven<Classe>{ private static final long serialVersionUID = 8354047356806230499L; /* ClassService接口 */ private IClassService classService = null; private Classe classe = new Classe(); /** * 分页查询数据 * * @return * @throws Exception */ public String pageQueryClasses() throws Exception { int sourceNum = classService.getCount(""); List<Classe> classes = classService.findPage("", this.getPage(), this.getRows()); Page pageObj = new Page(0, sourceNum, 10, classes); this.sendJsonDataToClient(JSONObject.fromObject(pageObj).toString(), ServletActionContext.getResponse()); return null; } ………………………………………………………………
其中sendJsonDataToClient方法体如下:
/** * 将指定的数据写到客户端 * * @param jsonData * @param response */ public void sendJsonDataToClient(String jsonData, HttpServletResponse response) { response.setContentType("text/html;charset=UTF-8"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache, must-revalidate"); response.setHeader("Pragma", "no-cache"); try { response.getWriter().write(jsonData); response.getWriter().flush(); response.getWriter().close(); } catch (IOException e) { e.printStackTrace(); } }
相关推荐
处理action返回结果和json互转 struts2-json-plugin-2.3.1.2.jar
涉及了数据(MYSQL)设计,登录实现,以及使用JSON传输数据,Ajax发送请求与处理等,特别适合初学者学习Java WEB的学习材料
NULL 博文链接:https://xinklabi.iteye.com/blog/1569436
java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。
非常全的json各种类型数据处理方法 strut2.3+jquery +ajax+json
java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。
NULL 博文链接:https://lw671579557.iteye.com/blog/1946083
使用ext2.2 struts2集成生成的一棵树,主要是对struts2返回json数据进行一些处理,树使用ext本身自带的例子
jsp通过Ajax无刷新获取Action返回的模拟数据,然后通过struts2转化成json数据返回页面....这里面Map,List,对象等等,一些常用的操作都有。主要的代码在Action和 json.js里面。适合新手入门
使用JQuery传递数据到struts action ,并返回JSON对象数据,在JQuery回调函数解析数据的,Ajax异步处理的小测试
Struts2+ajax+json返回list,并处理json返回为[object,object]的方法,Struts2配置
一个处理支持Json数据处理的Portlet应用
一个jquery+json 数据传递的 实例工程,代码注释详细,很适合 初学者,这是我帮老弟打的,希望可以帮到其他人
1. 导入struts2 及json包 asm-3.3.jar asm-commons-3.3.jar asm-tree-3.3.jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang3-3.1.jar freemarker-2.3.19.jar javassist-3.11.0.GA.jar ognl-...
JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。JSON 是JavaScript 原生格式,这意味着在JavaScript 中处理JSON 数据不需要任何特殊的API 或工具包。
struts2的异常处理,解决异步请求时,异常以json格式发送到客户端。以及dao单元测试的配置。
struts2 框架如何处理用户请求 框架如何处理用户请求 框架如何处理用户请求 框架如何处理用户请求 struts2 struts2struts2 struts2 的 ActionAction ActionAction 如何实现和 如何实现和 如何实现和 servletAPI ...
Jquery+struts2上传图片,制作进度条等示例,还有Jquery+Json+Struts实现Ajax技术,还有图形处理技术等,虽然很少,但都有重点突出,由于我也是学习,所以代码不是很简洁,对想学习交流的朋友非常合适
本资源介绍的是ajax和servlet和struts和json一块使用的时候的例子,而且最后的那个例子里面还介绍了struts处理ajax请求的不同方式,简单而明了。