`
kitssilence
  • 浏览: 12985 次
  • 性别: Icon_minigender_1
  • 来自: 襄樊
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

struts2和json交互

阅读更多

struts2.1.8.1+jquery1.4.2返回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
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等参数.

分享到:
评论

相关推荐

    struts2和json交互汇编.pdf

    ### Struts2与JSON交互详解 #### 一、前言 在现代Web开发中,前后端分离成为一种趋势,这使得后端系统更加专注于业务逻辑处理而非页面展示。Struts2作为一款流行的Java Web框架,提供了强大的功能来支持这种模式。...

    struts2+json

    总的来说,"struts2+json"资源涉及到了Struts2框架中的Action设计、拦截器机制、结果类型的配置,以及AJAX和JSON在Web应用中的使用。理解这些知识点对于开发动态、交互性强的Java Web应用至关重要。

    Struts2+Json+Android简单实现

    总结来说,“Struts2+Json+Android简单实现”是一个典型的前后端交互示例,展示了如何利用Struts2作为服务端接口,通过JSON进行数据交换,最后在Android客户端进行数据展示和用户交互。理解并掌握这种技术栈对于构建...

    ajax与Struts2使用json格式交互实例

    使用Struts2和jQuery EasyUI实现简单CRUD系统,从零开始,从基础的ajax与Struts2的使用json格式进行交互开始。

    struts2与json整合

    在探讨“Struts2与JSON整合”的主题时,我们深入分析了如何在Struts2框架中集成JSON技术,实现前后端数据的高效交互。Struts2作为一款流行的Java Web开发框架,提供了丰富的功能来简化Web应用程序的开发过程。而JSON...

    struts2-json-plugin源码

    `struts2-json-plugin`是Struts2的一个插件,它使得Struts2能够处理JSON请求和响应,无需额外的配置或库。这个插件不仅包含了源码,还包含了必要的配置文件和类,使得开发者可以深入理解其工作原理并进行自定义扩展...

    struts2返回JSON数据的两种方式

    在本文中,我们将探讨两种在Struts2框架中返回JSON数据的方法。...二是利用Struts2的内置JSON插件,通过返回特定的属性和结果类型自动处理JSON。每种方法都有其适用场景,可以根据项目需求选择合适的方式。

    struts2所需的包和Struts2_json所需包

    在标题和描述中提到的"struts2所需的包和Struts2_json所需包",主要是指为了实现Struts2框架与JSON数据交互所需要的一系列依赖库。这些包包括但不限于以下几部分: 1. **Struts2核心库**:这是Struts2的基础,包含`...

    struts2-json

    Struts2支持JSON的处理,使得开发人员能够轻松地将Java对象转换为JSON格式,然后发送到客户端,或者将JSON数据解析成Java对象。下面我们将深入探讨Struts2集成JSON的相关知识点。 1. **Struts2 JSON插件**: ...

    一个简单的struts2+json+jquery 交互的例子

    Struts2、JSON和jQuery是Web开发中常用的三个技术,它们在构建动态、交互式的Web应用程序时发挥着关键作用。这个例子将展示如何整合这三个工具,实现前后端的数据交换。 首先,Struts2是一个强大的MVC(Model-View-...

    Struts2_JSON_Demo

    在"Struts2_JSON_Demo"项目中,你可以通过分析源代码,了解上述各个步骤的实现细节,从而深入理解Struts2和JSON的交互。这个示例项目将帮助你掌握如何在实际项目中有效地使用Struts2和JSON,提升Web应用的性能和用户...

    struts2-json-lib

    总之,"struts2-json-lib"提供了实现Struts2和JSON整合所需的全部组件,简化了在Java Web应用中处理JSON数据的过程。正确地配置和使用这些库,可以大大提升开发者的生产力,让Web应用具备更强大的数据交互能力。

    AJAX和struts2传递JSON数组

    总结来说,通过这种方式,我们可以利用AJAX向Struts2 Action传递JSON数组,实现异步数据交互。这在动态更新页面内容、处理表单提交等场景下非常有用。同时,使用JSON作为数据交换格式,使得前后端的数据交换变得更加...

    Struts2 ajax json使用介绍

    在Struts2中,我们可以利用Ajax和JSON来实现数据的异步交互。 **一、引入所需库** 首先,为了在Struts2中使用Ajax和JSON,我们需要引入以下库: 1. Struts2的核心库:`struts2-core.jar` 2. Struts2的JSON插件:`...

    struts2和json的jar包

    总的来说,Struts2和JSON的结合使得Java Web开发更加便捷,尤其在构建交互性强、响应速度快的Web应用时。通过导入相关的jar包,开发者可以轻松地在Struts2框架中实现JSON数据的交换,从而提高开发效率和用户体验。...

    Struts2与JSON

    将Struts2与JSON整合,可以实现高效、动态的Web交互。 首先,我们要理解Struts2整合JSON的基本流程。在Struts2中,我们可以通过Action类返回一个JSON结果类型,这样Struts2会自动将Action的属性转化为JSON格式并...

    struts2+json的使用

    Struts2是一个流行的Java web框架,它为开发者提供...综上所述,Struts2与JSON的集成大大简化了前后端的数据交互,提高了应用程序的效率和响应速度。开发者只需遵循上述步骤,便能在Struts2应用中轻松实现JSON的支持。

    Struts2.5操作JSON相关jar包

    首先,`json包和struts2——json插件`这个文件很可能包含了Struts2的JSON插件,它是Struts2与JSON进行数据交换的核心组件。该插件允许我们在Action类中直接返回JSON对象,无需额外的序列化处理。通过配置插件,...

    struts2-json包集合 不会出现任何报错

    在标题中提到的"struts2-json包集合 不会出现任何报错",意味着这个压缩包集合包含了一组兼容的Struts2和JSON相关的库,可以避免常见的错误,特别是`textutils class找不到`的问题。 在描述中,提到了几个关键的包...

    EasyUI与Struts2使用json格式交互实例

    使用Struts2和jQuery EasyUI实现简单CRUD系统,从零开始,从基础的EasyUI与Struts2的使用json格式进行交互开始。

Global site tag (gtag.js) - Google Analytics