`

struts2+jsonplugin

阅读更多
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
2、后台:

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;
   } 
   /*返回UserInfo对象*/  
   public String returnUser(){
       userInfo = new UserInfo();
       userInfo.setUserId(10000);
       userInfo.setUserName("刘栋");
       userInfo.setPassword("123456");
       return SUCCESS;
   }
  /*返回List对象*/  
   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>
3、前台:

1) 页面引入jquery-1.4.2.js
2) 代码如下:
<script language="javascript">
   function getMsg(){
      $.ajax({
         url:'json/returnMsg.action',
         type:'post',
         dataType:'json',
         success:function(data){
        $("#result").html(data.message);
         }
      });
    }

   function getUser(){
      $("# result ").html(""); 
      $.ajax({
         url:'json/returnUser.action',
         type:'post',
         dataType:'json',
         success:function(data){
        $("#result").append("用户ID:"+data.userInfo.userId+"")
                        .append("用户名:"+data.userInfo.userName+"")
                        .append("密码:"+data.userInfo.password+"");
         }
      });
    }

   function getUserList(){
      $("# result ").html("");  
      $.ajax({
         url:'json/returnList.action',
         type:'post',
         dataType:'json',
         success:function(data){
           $.each(data.userInfosList,function(i,value){  
          $("#result").append("第"+(i+1)+"个用户")
                          .append("用户名:"+value.userName+"")
                          .append("密码:"+value.password+"");
           }
         }
      });
    }
</script>
<div id="result"></div>
<input type="button" value="获得单个消息" onclick="getMsg()"/>
<input type="button" value="获得用户信息" onclick="getUser()"/>
<input type="button" value="获得用户列表" onclick="getUserList()"/>

4、只要继承extends="json-default",result type设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做),然后调用ajax的callback方法. 返回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等参数.







注意点:

返回list数据结构的时候,如果单独返回某些特定的属性,需要这样写:

tags\[\d+\]\.id,tags\[\d+\]\.tagname
之间的\符号千万别写漏,不然就会报

Caught OgnlException while setting property 'includeProperties' on type xxx之类的错误。
分享到:
评论

相关推荐

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

    在这个过程中,我们通常会用到`json2.js`库来处理JSON数据在JavaScript端的解析和序列化,以及Struts2的`jsonplugin`来支持JSON响应。 首先,让我们详细了解一下`json2.js`。这个JavaScript库是由Douglas Crockford...

    Struts2 + jQuery+JSON 实现ajax

    ### Struts2 + jQuery + JSON 实现Ajax 在现代Web开发中,Ajax技术因其能够实现网页的局部刷新而被广泛采用。本篇文章介绍如何利用Struts2框架结合jQuery与JSON来构建一个简单的Ajax功能。 #### 一、环境搭建 1. ...

    Struts2+JSON 实现AJAX 返回对象和列表

    ### Struts2+JSON 实现 AJAX 返回对象和列表 #### 一、背景介绍 随着Web技术的发展,Ajax(Asynchronous JavaScript and XML)已经成为现代Web应用不可或缺的一部分。它通过后台与前端进行异步数据交换和操作,使...

    最新Struts2+jq+ajax+json 学会总要4步‵‵超级简单,里面包含实例

    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-...

    Struts2 + jQuery 实现ajax.txt

    ### Struts2 + jQuery 实现Ajax交互的关键技术与实践 #### 概述 在Web开发领域,使用Struts2框架结合jQuery实现Ajax交互是一种常见的做法。这种组合不仅可以提高Web应用程序的响应速度,还能显著提升用户体验。...

    Struts2_Jsonplugin_详解.doc

    Struts2 JSON插件是用于增强Struts2框架对AJAX和JSON支持的一个插件。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得客户端和服务器之间的数据交换变得更加简单。在Struts2中,JSON插件提供...

    Json+Struts2+JQuery及JQuery相关插件的例子,json架包...

    2. "struts2-json-plugin-2.1.8.1.jar" 是Struts2的JSON插件,它扩展了Struts2,使其支持JSON格式的Action结果和请求参数。 3. "jsonplugin-0.34.jar" 和 "jsonplugin-0.32.jar" 可能是其他与JSON处理相关的库或插件...

    Struts2+JSON_实现AJAX_返回对象和列表

    要使用JSON插件,你需要下载并添加相应的JAR文件到项目的类路径中,例如`jsonplugin-0.33.jar`和其他Struts2的核心库。 为了实现返回一个结果对象,首先我们需要创建一个JavaBean作为值对象。在这个例子中,我们...

    struts2+juery+ajax+json+进度条显示

    在原来的项目中集成juery的ajax功能,返回json串,结果报了一大堆版本冲突以及jar包缺失的问题,在...struts2-core-2.1.6.jar struts2-spring-plugin-2.1.6.jar json-lib-2.1.jar jsonplugin-0.34.jar xwork-2.1.2.jar

    培训信息发布平台v1.0

    使用技术:struts2(+jsonplugin-0.3) + Spring2.5 + iBatis2.3 + ExtJs3.0 使用的浏览器:Firefox3.0 数据库生成:train_s2sie3_v1.sql 测试数据:train_s2sie3_v1_data.sql 这个项目是在以前做过的一个小项目...

    struts+spring+ibatis框架集成.pdf

    Struts2、Spring和iBatis是三种广泛应用于Java企业级开发的开源框架,它们各自在不同的领域提供了强大的功能,并且可以很好地集成在一起,形成一套完整的MVC(模型-视图-控制器)架构。 Struts2是基于MVC设计模式的...

    struts2.1.8+spring2.5+hibernate3.2+ext3.0框架整合笔记(一)

    Ext的JSONStore可以配合Struts2的JsonResult或JsonPlugin,使Action直接返回JSON数据,从而驱动Ext的GridPanel等组件动态更新。 整合这些框架时,需要关注以下几点: 1. 配置文件的设置:确保`struts.xml`、`spring...

    struts+ajax+json需要的jar包

    struts2+ajax+json需要的jar包:commons-beanutils-1.8.0.jar commons-lang-2.5.jar ezmorph-1.0.6.jar json-lib-2.4-jdk15.jar struts2-core-2.0.14.jar jsonplugin-0.32.jar

    struts2 的jar包jsonplugin-0.33.jar包

    在这个场景中,我们关注的是`jsonplugin-0.33.jar`,这是一个用于Struts2的插件,专门处理JSON(JavaScript Object Notation)数据格式的交互。 JSON是网络上数据交换的一种轻量级格式,因其简洁和高效而被广泛采用...

    Jsonplugin结合struts2使用说明

    在提供的文档《Struts2_Jsonplugin_详解.doc》和《JsonPlugin 使用.docx》中,你应该能找到更具体的使用示例和详细配置信息。这些文档可能涵盖了如何处理集合类型、自定义类型转换器、错误处理以及与其他Struts2功能...

Global site tag (gtag.js) - Google Analytics