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

struts2 中的 result 返回类型是 json 的配置问题

阅读更多

1、引入包(本文中的包全部引自struts-2.1.8.1\lib)

 

struts2-json-plugin-2.1.8.1.jar 

 

json-lib-2.1.jar

 

commons-collections-3.2.jar

 

commons-beanutils-1.7.0.jar

 

commons-lang-2.3.jar

 

commons-logging-1.0.4.jar

 

ezmorph-1.0.3.jar

 

7个包是返回json形式的数据必须的。因为json大量引用了Apache commons的包,所以要加入4个,commons包,除了commons的包外,还需要引入一个 ezmorph的包。最后加入struts2必须的6个包: 

 

struts2-core-2.1.8.1.jar 

 

xwork-core-2.1.6.jar

 

ognl-2.7.3.jar

 

freemarker-2.3.15.jar

 

commons-fileupload-1.2.1.jar

 

commons-io-1.3.2.jar

 

1) Userinfo实体类代码

 

 public class UserInfo implements Serializable {   

    private int userId;  

    private String userName; 

    private String password; 

    get set方法略

}

 2) Action类

 

 

 public class TestAction extends ActionSupport {

    private String message;                //使用json返回单个值

    private UserInfo userInfo;              //使用json返回对象

    private List userInfosList;     //使用josn返回List对象

    get set方法略

      

   public String returnMsg(){   

        this.message = "成功返回单个值";  

        return SUCCESS; 

   }  

      

   public String returnUser(){ 

       userInfo = new UserInfo();

       userInfo.setUserId(10000);

       userInfo.setUserName("刘栋");

       userInfo.setPassword("123456");

       return SUCCESS; 

   } 

   

   public String returnList(){   

       userInfosList = new ArrayList<UserInfo>(); 

       UserInfo u1 = new UserInfo(); 

       u1.setUserId(10000);   

       u1.setUserName("张三"); 

       u1.setPassword("111111");

       UserInfo u2 = new UserInfo();

       u2.setUserId(10001);   

       u2.setUserName("李四");   

       u2.setPassword("222222"); 

       userInfosList.add(u1); 

       userInfosList.add(u2);  

       return SUCCESS;   

   }   

}

 

 

3) struts.xml(必须继承json-default、json-default继承自struts-default)

 

 <package name="default" namespace="/json" extends="json-default"> 

<action name="returnMsg" class="com.testAction " method="returnMsg">   

<result  name="success" type="json">

<param name="root">validate</param>

</result>   

</action> 

<action name="returnUser " 

class="com.testAction " method="returnUser ">

<result  name="success" type="json">

<param name="includeProperties">

userInfo\.userId,userInfo\.userName,userInfo\.password

</param>

</result>   

</action>

<action name="returnList" class="com.testAction "

 method="returnList">   

<result  name="success" type="json">

<param name="includeProperties">

userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password

</param>

</result>   

</action>

</package>

 

 

4、只要继承extends="json-default"result type设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做

 

5includeProperties 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。 

 

如:输出UserInfo的所有属性及UserInfouserName属性

 

 

 

<result type="json">

   <param name="includeProperties"> userInfo.*, 

   userInfo \. userName </param>

</result> 

 

 

 

6excludeProperties 参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties 

 

7、输出一个JSON List列表

 

 

 

<result name="success" type="json"> 

<param name="includeProperties"> 

    userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password

</param> 

</result>

 

其中userInfosListaction中的一个List类型的属性,userInfosList \[\d+\]\. userName表示,userInfosList中存储的对象0..enduserName属性(list中存储的对象必须有userName属性)。

 

8、为什么要用includePropertiesexcludeProperties 参数:主要是为了过滤掉接口,pojosetlist、其它对象等不需要的数据防止循环取其它关联对象或找不到接口。如果不配置,默认是处理 action中的所有属性,如果action中有接口注入,json拦截器可能找不到接口而返回不了结果,还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,如果其它对象有listset,其返回结果相当庞大,有可能是死循环而无法返回 。如果不用<param name="includeProperties">或其他方式进行json数据过滤,通过debug你会发现前台返回的json字符串,是把 action中的所有属性全部转化成json字符串返回给客户端(包括service接口、pojo所有属性及有关联的pojo。有时候根本返回不了结果,也不报错,后台执行了,但前台执行不到callback function,这主要是因为找不到接口或者关联的pojo太多,造成死循环),一般情况下用的最多的就是root、 includeProperties excludeNullProperties参数。当然还有其他的方法,如给pojo的属性加json注解。

 

9、总结: action中避免使用get开头的action方法,去掉action中的接口的get方法 为json类型的result配置includeProperties, excludeProperties等参数.

 

分享到:
评论

相关推荐

    struts2返回JSON数据的两种方式

    总结,Struts2中返回JSON数据有两种主要方式:一是通过`response.getWriter().print()`手动输出JSON字符串;二是利用Struts2的内置JSON插件,通过返回特定的属性和结果类型自动处理JSON。每种方法都有其适用场景,...

    struts2+json

    在Struts2中集成JSON支持,首先需要添加相应的依赖,比如struts2-json-plugin,这个插件提供了JSON结果类型。当Action执行完毕后,可以返回一个JSON结果类型,Struts2会自动将Action的属性转换为JSON格式并返回给...

    struts2返回json

    在Struts2中,返回JSON(JavaScript Object Notation)数据类型是一种常见的需求,尤其是在开发AJAX或者前后端分离的应用时。JSON是一种轻量级的数据交换格式,它允许服务器向客户端发送结构化的数据,而无需解析...

    使用Struts2的JSON插件来实现JSON数据传递

    启用插件后,你可以定义一个Struts2的动作(Action),并声明返回类型为`json`。例如: ```java public class MyAction extends ActionSupport { private String message; // Getters and Setters @Override ...

    Struts2使用Annotation返回Json

    本篇文章将深入探讨如何在Struts2中通过注解实现返回JSON数据的功能。 首先,让我们理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Web应用中...

    struts2与json整合

    在Struts2中,Action类中的方法负责处理来自客户端的请求。为了返回JSON数据,可以定义一个如下的Action方法: ```java public String getXxx() { return "aaa"; } ``` 当客户端调用此方法时,Struts2会自动将...

    struts2 action 返回json方法(一)源码

    本篇将详细讲解如何在Struts2中配置Action来返回JSON响应。 首先,我们需要了解Struts2的Result类型。默认情况下,Action会返回一个JSP页面作为结果,但通过配置,我们可以让Action返回JSON数据。这需要使用到一个...

    maven-web项目 Struts2 Struts注解 Struts2返回json

    在Struts2中,我们可以使用注解来配置Action类,而不是传统的XML配置文件。例如,`@Action`注解用于标识一个方法作为处理请求的入口,`@Result`注解则定义了处理完请求后返回的视图。 Struts2的注解极大地提高了...

    struts2 json

    1. **配置Struts2**:在struts.xml配置文件中,为Action添加JSON结果类型,如`&lt;result type="json"&gt;`。 2. **创建Action**:Action类需要返回一个可以被转化为JSON的Java对象,例如一个Map或自定义的JavaBean。 3....

    struts2中配置json

    在Struts2中配置JSON是为了让应用程序能够处理和返回JSON格式的数据,这在现代Web应用中非常常见,因为JSON是轻量级且易于解析的数据交换格式。在本文中,我们将深入探讨如何在Struts2中配置JSON支持以及其相关知识...

    json2+jsonplugin struts2整合ajax时,使用json时需要的jar包

    在Struts2与Ajax的交互中,后端返回的JSON数据需要在前端被`json2.js`解析成可操作的对象,这样才能在页面上动态更新内容。 接下来,我们讨论Struts2的`jsonplugin`。Struts2 JSON插件是官方提供的一个扩展,它使...

    Struts2与JSON

    在Struts2中,我们可以通过Action类返回一个JSON结果类型,这样Struts2会自动将Action的属性转化为JSON格式并返回给客户端。客户端通常使用JavaScript库如jQuery来接收并处理这些数据。 在描述中提到的"以JQuery...

    struts2返回json数据的方法一 使用json-default

    本篇文章将详细讲解如何在Struts2中使用“json-default”拦截器来返回JSON数据。 首先,我们需要理解Struts2的拦截器(Interceptor)机制。拦截器是Struts2框架的核心组件之一,它们在Action执行前后执行特定的任务...

    struts2-json-plugin源码

    在Struts2中,通过整合JSON插件,可以方便地将Action的返回结果转换为JSON格式,供前端JavaScript处理。 `struts2-json-plugin`是Struts2的一个插件,它使得Struts2能够处理JSON请求和响应,无需额外的配置或库。这...

    JQuery发送Ajax请求Struts2,并返回JSON的例子

    在Struts2中,我们可以配置Action类来处理Ajax请求,并以JSON格式返回数据。 以下是一个简单的示例步骤: 1. **前端设置**: 在HTML页面中,使用jQuery发起Ajax请求。例如: ```javascript $.ajax({ url: ...

    struts2使用json返回对象和列表(案例)

    在Struts2中集成JSON,我们可以实现将服务器端的数据以JSON格式返回给客户端,从而避免了页面刷新,提高了用户体验。 **JSON插件的引入和配置** 在Struts2中使用JSON功能,首先需要引入JSON插件。你可以从官方网址...

    struts2.1.6利用convention-plugin和json-plugin实现json零配置

    2. 配置Struts:在`struts.xml`中启用Convention Plugin和JSON Plugin。 3. 设计Action:编写Action类,遵循约定的命名规则,并添加必要的方法。 4. 标注Action:使用`@Action`和`@Result`等注解来定义Action的行为...

    json struts2转换

    1. **配置JSON支持**:要在Struts2中启用JSON响应,首先需要在`struts.xml`配置文件中添加JSON插件的相关配置。这通常涉及到注册一个全局结果类型`json`,例如: ```xml &lt;constant name="struts.action.extension" ...

Global site tag (gtag.js) - Google Analytics