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拦截器来做)

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

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

<result type="json">

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

userInfo \. userName </param>

</result>

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

7、输出一个JSON List列表

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

<param name="includeProperties">

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

</param>

</result>

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

8、为什么要用includeProperties或excludeProperties 参数:主要是为了过滤掉接口,pojo的set、list、其它对象等不需要的数据防止循环取其它关联对象或找不到接口。如果不配置,默认是处理 action中的所有属性,如果action中有接口注入,json拦截器可能找不到接口而返回不了结果,还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,如果其它对象有list、set,其返回结果相当庞大,有可能是死循环而无法返回 。如果不用<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等参数.

10、不配置

<param name="includeProperties">

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

</param>

status 会把Action所有的get方法都执行 就会多了很多sql执行 就是为了获得 Action中定义的所有属性 返回的josn串也会是所有属性的长串。

struts2 中的 result 返回类型是 json 的配置问题的更多相关文章

  1. struts2中的结果视图类型

    实际上在Struts2框架中,一个完整的结果视图配置文件应该是: <action name="Action名称" class="Action类路径" me ...

  2. HttpClient获取返回类型为JSON或XML的数据

    Java_HttpClient获取返回类型为JSON或XML的数据 原创 2017年04月06日 17:38:29 706 HttpClient 获取返回类型为JSON或XML的数据 使用httpco ...

  3. jquery ajax中支持哪些返回类型以及js中判断一个类型常用的方法?

    1 jquery ajax中支持哪些返回类型在JQuery中,AJAX有三种实现方式:$.ajax() , $.post , $.get(). 预期服务器返回的数据类型.如果不指定,jQuery 将自 ...

  4. 理解Java中的协变返回类型

    在面向对象程序设计中,协变返回类型指的是子类中的成员函数的返回值类型不必严格等同于父类中被重写的成员函数的返回值类型,而可以是更 "狭窄" 的类型. Java 5.0添加了对协变返 ...

  5. c++ 类覆盖方法中的协变返回类型

    c++ 类覆盖方法中的协变返回类型 在C++中,只要原来的返回类型是指向类的指针或引用,新的返回类型是指向派生类的指针或引用,覆盖的方法就可以改变返回类型.这样的类型称为协变返回类型(Covarian ...

  6. Struts2中Action各种转发类型

    Struts2:Action中result的各种转发类型: 内部请求转发dispatcher(默认值) redirect.redirectAction.plainText1.redirect是重定向到 ...

  7. Struts2的result返回类型

  8. ajax返回类型dataType json和text比较

    $.ajax({ type: "post", url: "${ctx}/modules/fos/reference/echart", //dataType:'j ...

  9. .NET中IActionResult的返回类型

    ActionResult继承了IActionResult JsonResult.RedirectResult.FileResult.ViewResult.ContentResult均继承了Action ...

随机推荐

  1. Jquery 表格操作,记录分页情况下,每一页中被用户勾选的信息

    如下图,一个分页列表,用户可以随意勾选一条或多条信息,然后进行某种操作,如“提交”.但是有个问题:如果勾选了一条信息之后,点[下一页],那么上一页 勾选的条目被刷新掉了. 问题:如果用户需要在第1页, ...

  2. [CSS]三层嵌套的滑动门

    原理: 最外层放水平平铺的背景,第二层放左边,第三层放右边,注意这个做法背景图不能透明 结构: <div class="module-title"> <span ...

  3. javascript——拖拽(完整兼容代码)

    拖拽,是JS经常会用到的效果,在网上有很多的这样那样的拖拽效果,但其中往往大多有各种各养的问题,功能不全,无法兼容,而且修改的时候 也是十分麻烦. 其实拖拽的原理很简单,无非是鼠标的三个动作的解析,以 ...

  4. Android窃取用户信息新思路

    0×01 我们能得到哪些android手机上的app敏感信息手机上的app敏感信息◦通讯录,通讯记录,短信◦各种app的帐号密码,输入信息资料等◦各种影音资料,照片资料◦等等0×02  我们有哪些方法 ...

  5. 判断comboBox是否选对了绑定的数据库中的项

    实现: comboBox1下拉列表已绑定数据库,将选中的项保存到数据库时,判断是否已选中下拉列表里的项 如果没选中,或者输入了其他的值,和已绑定的数据不匹配,出现提示框 按钮的点击事件中: strin ...

  6. Validform自定义提示效果-使用自定义弹出框

    $(function(){ $.Tipmsg.r=null; $("#add").Validform({ tiptype:function(msg){ layer.msg(msg) ...

  7. JSChart

     转自:http://www.cnblogs.com/riverback-moon/archive/2010/10/11/1848071.html JSChart是一个轻量级的在线图表生成工具,本身十 ...

  8. 利用K2和Microsoft Dynamics CRM构建业务App的5大理由

    Microsoft Dynamics CRM提供了一个绝佳的客户关系管理平台,使您能够创建各种以客户为中心的解决方案.然而,通过将K2的企业业务流程功能与Microsoft Dynamics CRM相 ...

  9. dhtmlxScheduler日历日程控件包括天视图,周视图,月视图,年视图和日程表视图

    dhtmlxScheduler 是一个基于Web的类似于Outlook的日历日程控件. 它完全由javascript/js/css编写, 提供类似于MS Outlook Calendar, Apple ...

  10. Struts2 validate校验

    一般的,用户注册的时候,我们需要校验一些用户提交过来的参数. 一般有两道屏障,一是在前台页面上使用js进行验证,直接杜绝了不正常信息的提交.二是将提交过来的信息进行验证,不通过则返回注册页面并显示错误 ...