`
yeqing4562011
  • 浏览: 5896 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
文章分类
社区版块
存档分类
最新评论

struts2自定义JSONResult类型,JSON对象化操作。

 
阅读更多

最近学习JSON的时候,数据传输问题。以前比较迷惑JSON类型的数据,老是感觉就是JSON格式数据传输,不方便的很,也很反感。最近项目中用到了一个方法,所以就记录一下,也顺便接收接收大家的意见,完善代码、提高自己技术。


(注:我相信,在我之前肯定有人发过此类代码,我并不与他人相比,只是自己的代码,如果有哪些地方写的不对,不合理的地方,大家指正,虚心受教,但是请不要谩骂!)

 

json-lib-2.4-jdk15.jar JSON转换格式jar包。 在JSONObject的官网中就有。

 

Struts的配置

 

<!--自定议返回类型-->
		<result-types>
			<result-type name="jsonResult" class="base.web.result.JsonResult"/>
		</result-types>


<action name="ajax" class="base.web.actions.week.WeekDataAction"
				method="ajax">
				<!-- jsonResult自定义返回类型, -->
				<result name="success" type="jsonResult">
				</result>
		</action>
 

 

 

1.基础返回类型的抽象类 BaseResult

(1)在定义struts的返回类型时候,则必须继承StrutsResultSupport这个类

(2)调用父类的构造方法。

package base.web.result;

import org.apache.struts2.dispatcher.StrutsResultSupport;

import com.opensymphony.xwork2.ActionInvocation;

/**
 * <ol>
 * date:2011-10-15 editor:Yq
 * <li>创建文档</li>
 * <li>返回结果类型基础类</li>
 * </ol>
 * <ol>
 *
 * @author YeQing
 * @version 2.0
 * @since 1.6
 */
public abstract class BaseResult extends StrutsResultSupport{

	public BaseResult() {
		super();
	}
	
	public BaseResult(String location) {
		super(location);
	}
	
	public boolean isAjax = false;
	
}

 2.自定义返回类型的类 JsonResult

package base.web.result;

import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

import org.apache.struts2.ServletActionContext;

import base.web.actions.BaseAction;

import com.opensymphony.xwork2.ActionInvocation;

/**
 * <ol>
 * date:2011-10-15 editor:Yq
 * <li>创建文档</li>
 * <li>自定义返回类型JsonResult类</li>
 * </ol>
 * <ol>
 *
 * @author YeQing
 * @version 2.0
 * @since 1.6
 */
public class JsonResult extends BaseResult{

	protected boolean isAjax = true;
	
	protected void doExecute(String arg0, ActionInvocation invocation)
			throws Exception {
		
		//定义上下文的环境
		ServletContext sc = ServletActionContext.getServletContext();
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setCharacterEncoding(request.getCharacterEncoding());
		System.out.println(request.getCharacterEncoding());
		response.setContentType("application/json");//这里ContentType 需是application/json JS否则会出错。
		
		PrintWriter output = response.getWriter();//获取响应打印
		BaseAction baseAction = (BaseAction) invocation.getAction();//获得基础Action类
		
		JSONObject js = new JSONObject();//JSON转换为对象
		js.put("model", baseAction.getModel()); 
		/*此处js作为一个对象就像map一样存储自己的数据
		  baseAction.getModel()是actiond的基础父类
		     所有的action都必须继承BaseAction,BaseAction的变量 Map model = new HashMap();
		     则是所有action中数据存放的map, model则是放在struts2的值栈中的数据。
		     所有的数据,都必须放在model里,然后在jsp页面使用JSTL进行输出.
                     (也就是,说我将数据放入了model,然后将model放入了JSONObject,成为了JSON对象,
                      然后在js里获得值,就像点运算符一样。)
                 */
		
		js.write(output);//打印
	}

}
 

3.JS异步请求,在回调函数中获取数据。

this.ajax=function() {
		var request = new $WebRequest(basrUrl+"/psw/server/week/ajax.do",0,function(result)
		{
			alert(result.model.m.one);
			//从回调函数的result中
			//获取存储的model 然后获取model中的m集合,
                        //m.one map集合 中的oneKey 的值
		});
		request.Start();
	};

 

4.补上WeekDataAction的方法。

public String ajax() {
		
		System.out.println("start.......");
		Map map = new HashMap();
		map.put("one", 1);
		map.put("two", 2);
		model.put("m", map); //父类的变量
		return getResult();
	}

 

 

结束,有些地方时项目中内容,牵扯类很多不好粘贴,如果大家有更好的办法,告知一下,学习。

 

5
2
分享到:
评论
2 楼 bendan123812 2012-11-26  
楼主的方法很好了,只是楼主在设计的时候是把整个Action都放在JS对象里了,如果别人的Action中有很多的参数,可能会对系统的性能有一定的影响。能否在自定的返回值类型中加上一些参数,可以让开发者根据自己的需要有选择性的封装Action中的数据呢。。呵呵,只是说下自己的看法。
1 楼 yeqing4562011 2011-11-02  
同学们,不要闷声的踩,不好的地方说出来,改就是了。我知道自己什么水平。

相关推荐

    struts2-json-plugin源码

    7. **自定义JSON序列化和反序列化**:源码中可能会包含自定义的序列化和反序列化逻辑,以便在转换过程中处理特定类型的对象。 学习`struts2-json-plugin`的源码可以帮助开发者了解Struts2如何处理JSON数据,如何...

    json_struts2.rar_JSON java_SSH json Struts2_java json_json_strut

    例如,Struts2提供了一个`JsonResult`动作结果类型,用于自动处理JSON响应。 2. **Struts2的JSON插件**:Struts2有专门的JSON插件,可以轻松地启用JSON支持。通过配置struts.xml,我们可以指定哪些Action应返回JSON...

    json struts2转换

    3. **JSON属性映射**:Struts2 JSON插件会自动将Action类的公共属性转换为JSON对象。如果需要自定义哪些属性应该包含在JSON中,或者控制它们的行为,可以使用`@JSON`注解。例如: ```java public class User { @...

    struts2 相关jar包 包含json-lib-2.1.jar+struts2-json-plugin-2.1.8.1.jar

    这个压缩包包含了两个关键的组件:json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar,它们是Struts2支持JSON(JavaScript Object Notation)序列化和反序列化的关键。 1. **json-lib-2.1.jar**: JSON是一种轻...

    Struts2整合jquery利用json与后台交互

    &lt;result-type name="json" class="org.apache.struts2.dispatcher.json.JSONResult"/&gt; ``` 接着,为Action添加一个方法,返回一个封装了数据的Map对象,然后在返回类型上标注`@SkipValidation`和`@ResponseBody`...

    json示例下载 +struts2

    7. **自定义JSON输出**:如果需要定制JSON的输出,比如忽略某些字段,可以通过实现`org.apache.struts2.json.JSONWriter`接口来自定义JSON序列化过程。 通过以上方式,你可以充分利用Struts2和JSON的特性,构建出...

    Struts2ToJson003.zip

    &lt;result-type name="json" class="org.apache.struts2.views.json.struts2.JsonResult" default="true"/&gt; ``` 然后,创建一个Action类,它是处理前端请求的核心。在这个Action类中,我们将定义一个方法,该方法将...

    struts 2.0 与 2.1 需要的json插件

    JSON插件为Struts 2提供了将Action结果直接转换为JSON对象的能力,这在构建AJAX(Asynchronous JavaScript and XML)应用或需要返回JSON响应的API时非常有用。下面我们将详细探讨Struts 2的JSON支持以及如何配置和...

    struts整合json用到Jar.zip

    2. **配置Struts2**:在`struts-default.xml`或自定义的配置文件中,需要添加JSON结果类型的支持,例如: ```xml &lt;result-type name="json" class="org.apache.struts2.json.JSONResult"/&gt; ``` 3. **Action...

    struts2+json

    当涉及到更复杂的JSON数据处理时,比如需要序列化Java集合或自定义对象,可能需要使用注解或配置来指定字段映射。例如,使用`@JSONField`注解来自定义字段名: ```java public class User { @JSONField(name = ...

    Android开发HTTP传输数据到Struts2生成Json数据案例

    为了接收JSON数据,需要在Action类的方法上使用`@Action("your-action")`注解,并设置接受的参数类型为`Map, Object&gt;`或自定义的Java对象,Struts2会自动将JSON数据解析到这些参数中。 ```java public class Your...

    struts2结合JSON的Ajax支持

    &lt;result-type name="json" class="org.apache.struts2.views.json.JSONResult"/&gt; ``` 这将注册一个名为“json”的结果类型,用于返回JSON格式的数据。 2. **Action配置**:在Struts2的Action类中,定义一个...

    struts2与json插件(2)

    当客户端发起一个请求到这个Action时,Struts2将会调用`execute()`方法,然后将返回的`"success"`映射到配置的`result`,最后`JsonResult`会将Action的属性转换为JSON并发送给客户端。 在实际应用中,`JsonUtils`还...

    struts2乱码与json插件(1)

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且模块化的MVC(Model-View-Controller)应用程序。在处理中文字符时,可能会遇到乱码问题,尤其是在用户输入和展示数据时。Struts2提供了多种方式来解决...

    Struts2处理json简介及注意事项

    理解Struts2的JSON处理机制后,可以深入到源码中查看其内部实现,比如`com.opensymphony.xwork2.util.JsonResult`类。同时,利用IDE中的调试工具和HTTP客户端(如Postman)可以帮助我们更好地测试和验证JSON响应。 ...

    struts 传递json数据

    在 Struts2 配置文件中,我们需要定义一个结果类型为 `json` 的结果,这样当返回 "success" 时,Struts2 将使用 `JSONResult` 处理 JSON 数据: ```xml &lt;package name="default" namespace="/" extends="struts-...

    ext2.2+struts2使用json传输数据生成的树

    为了返回`JSON`数据,我们需要配置Action类返回一个`JsonResult`类型的结果,这可以通过添加`struts-plugin.xml`中的相关配置实现。同时,在Action类中,我们可以将需要转换为`JSON`的数据集合(例如,树的节点信息...

    sturts2整合json的jar 包

    在Struts2中,通过这个库将Java对象转换成JSON格式,或从JSON字符串还原Java对象。 8. **commons-io-1.3.2.jar**:Apache Commons IO库,提供了一系列I/O操作的工具类,如文件操作、流操作等,虽然在整合JSON中不...

    json 解析所依赖的jar包

    2. **Action结果类型**:在Struts2中,Action类的方法返回值可以定义为“json”类型,这样框架会自动将Action对象的属性转化为JSON字符串。 3. **JSON注解**:如`@Result(type="json")`用于标记方法返回JSON结果,`...

    struts2面试题

    - Struts2提供JsonResult,支持异步请求和响应JSON数据。 - 利用Interceptor处理Ajax请求,提供自定义的响应格式。 10. **性能优化** - 使用缓存技术减少数据库查询。 - 优化Action的性能,减少不必要的计算。 ...

Global site tag (gtag.js) - Google Analytics