Struts2自定义Result处理JSON
来源:互联网 发布:ubuntu查看gpu使用率 编辑:程序博客网 时间:2024/06/06 04:51
以前在采用Struts2开发的项目中,对JSON的处理一直都在Action里处理的,在Action中直接Response,最近研读了一下Struts2的源码,发现了一个更加优雅的解决办法,自己定义一个ResultType,
首先大家先看下Struts2中的源码
包com.opensymphony.xwork2下的DefaultActionInvocation
472行
/** * Save the result to be used later. * @param actionConfig current ActionConfig * @param methodResult the result of the action. * @return the result code to process. */ protected String saveResult(ActionConfig actionConfig, Object methodResult) { if (methodResult instanceof Result) { this.explicitResult = (Result) methodResult; // Wire the result automatically container.inject(explicitResult); return null; } else { return (String) methodResult; } }
如果resultType实现了Result接口,则执行
this.explicitResult = (Result) methodResult; // Wire the result automatically container.inject(explicitResult); return null;
现在我们来定义一个接口(JsonResult)来处理一般的POJO对象
package com.kiloway.struts;import java.io.PrintWriter;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONObject;import net.sf.json.JsonConfig;import org.apache.struts2.ServletActionContext;import org.apache.struts2.dispatcher.StrutsResultSupport;import com.opensymphony.xwork2.ActionInvocation;public class JsonResult extends StrutsResultSupport {private Object result;private JsonConfig jsonConfig;public Object getResult() {return result;}public JsonResult(JsonConfig jsonConfig) {super();this.jsonConfig = jsonConfig;}public void setResult(Object result) {this.result = result;}private static final long serialVersionUID = 7978145882434289002L;@Overrideprotected void doExecute(String finalLocation, ActionInvocation invocation)throws Exception {HttpServletResponse response = null;try {response = ServletActionContext.getResponse();PrintWriter printWriter = response.getWriter();if (jsonConfig != null) {printWriter.write(JSONObject.fromObject(result).toString());} else {printWriter.write(JSONObject.fromObject(result, jsonConfig).toString());}}catch(Exception e){throw new Exception("json parse error!");} finally {response.getWriter().close();}}}
JsonReulst定义好了该如何让Struts处理呢?
我们在struts.xml里面可以这样定义
<package name="default" namespace="/" extends="struts-default"> <result-types> <result-type name="jsonResult" class="com.kiloway.struts.JsonResult"/> </result-types><action name="student" class="com.kiloway.struts.Student"><result name="json" type="jsonResult"/></action></package>
reuslt的name可以任意,但type必须和你注册的ResultType相同。
Action 中直接这样调用
public JsonResult getJson(){UserInfo f = new UserInfo();f.setName("小睿睿");f.setPassword("哈哈");JsonResult jsonResult = new JsonResult();jsonResult.setResult(f);return jsonResult;}
在我们的Action代码中就不用response.write了,完全交给了Reuslt对象去处理了(doExecute)
这样就很方便的处理了JSON格式的数据
在我下载的最新的struts的开发包里,发现了一个JSON处理插件 struts2-json-plugin-2.3.8.jar
该插件提供了更完善的JSON处理解决方案,下篇文章会介绍该插件的使用方式
- Struts2自定义Result处理JSON
- struts2 自定义result 处理JSON
- 扩展struts2的结果集StrutsResultSupport 自定义Result处理JSON
- Struts2 自定义Result类型
- Struts2 自定义Result类型
- Struts2自定义Result
- Struts2 自定义Result
- Struts2 自定义Result
- Struts2 自定义Result返回类型
- struts2自定义result中的type
- Struts2中自定义的Result
- 用struts2开发,<result type="json"></result>是什么意思?
- Struts2 Result 返回JSON对象详解
- 《研磨struts2》第五章 Result 之 5.7 自定义Result
- Struts2自定义Result(二)- StrutsResultSupport
- Result——Struts2的处理结果
- struts2 + jquery struts2 处理json
- struts2处理json
- 简单函数绘制
- 题目1481:Is It A Tree?
- PHP 时间日期格式化字符串总结
- UVA 1423 - Guess(前缀和之差+拓扑排序)
- int,NSInteger,NSUInteger,NSNumber
- Struts2自定义Result处理JSON
- 2013网页设计趋势
- xpath 使用方法 演示
- 代码注释
- 刘强东详解B2C电商本质
- 提交表单信息
- 带进度条的文件上传
- Servlet生命周期
- Servlet之间的跳转