`
漫步林中
  • 浏览: 4993 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

jQuery和struts2返回生成json数据

阅读更多

、引入包(本文中的包全部引自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等参数.

分享到:
评论

相关推荐

    AJAX 想Struts2后台传送Json数据并向前台返回Json格式的数据

    本主题主要探讨如何在Struts2框架下利用AJAX传递和接收JSON(JavaScript Object Notation)数据,这是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 首先,让我们理解三种在Struts2中...

    Struts2 与Jquery Ajax的json数据交换的典型范例

    总结,Struts2和jQuery的Ajax JSON数据交换涉及以下几个关键步骤:配置Struts2的JSON插件,编写返回JSON数据的Action,使用jQuery发起Ajax请求并处理返回的JSON数据。通过这种方式,可以实现客户端与服务器之间的...

    struts2+jquery执行ajax并返回json类型数据(源码)

    在这个"struts2+jquery执行ajax并返回json类型数据"的示例中,我们将探讨如何通过Ajax技术在后台Struts2框架与前端jQuery库之间交换JSON格式的数据。 首先,Struts2是一个强大的MVC(Model-View-Controller)框架,...

    jQuery+json异步实现JSP和struts2之间的数据传递

    "jQuery+json异步实现JSP和struts2之间的数据传递"是一个典型的应用场景,它结合了前端JavaScript库jQuery与后端MVC框架Struts2,通过JSON这种轻量级的数据交换格式进行高效的数据交互。下面我们将详细探讨这一主题...

    struts2返回json数据用query在页面接收

    在本场景中,我们将探讨如何在Struts2中返回JSON数据,并在页面上使用jQuery库的`$.ajax`或`$.getJSON`方法来接收和处理这些数据。 首先,我们需要在Struts2中配置JSON结果类型。在`struts.xml`配置文件中,添加一...

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    这个插件允许开发者在Struts 2中轻松地创建能够返回JSON的Action,使得前端(通常使用JavaScript库如jQuery)可以获取到JSON数据并进行进一步处理。 现在我们来详细讨论这两个库在实际应用中的作用: 1. **json-...

    struts2.3.20生成返回json 浏览器解析json

    在Struts2中,生成JSON响应主要通过使用Struts2的JSON插件来实现。首先,确保你的项目已经集成了Struts2的JSON插件。这通常涉及到在`struts.xml`配置文件中添加相应的配置: ```xml &lt;constant name="struts.enable....

    jquery ajax json struts2最简单例子测试成功

    通过Struts2的插件,如struts2-json-plugin,可以在Action类中直接返回一个包含JSON数据的对象,Struts2会自动将其序列化为JSON格式。 3. **WebRoot目录**:这是Web应用程序的根目录,包含了HTML、CSS、JavaScript...

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

    JSON是一种独立于语言的数据交换格式,具有易于人阅读和编写,同时也易于机器解析和生成的特点。它的数据结构主要由对象(键值对)和数组(有序集合)组成。在Web应用中,JSON常用于前后端的数据传输,因为它可以被...

    JQuery发起ajax请求Struts2,并操作JSON数据的例子

    在Web开发中,jQuery、Ajax、Struts2和JSON是常用的技术栈,它们结合使用能够构建动态、交互式的网页应用。下面将详细讲解这些技术及其在"JQuery发起ajax请求Struts2,并操作JSON数据的例子"中的应用。 **jQuery** ...

    Struts2+JSON+JQuery实现简单的验证

    通过Struts2处理业务逻辑和验证,JSON作为数据交换格式,JQuery在客户端进行交互和验证,可以构建出响应快速、用户体验良好的Web应用。理解并熟练掌握这三个技术,对于提升Web开发能力非常有帮助。

    struts2 整合jQuery 和 json 的全部jar包

    整合Struts2、jQuery和JSON可以极大地提升Web应用的用户体验和后端数据交互效率。下面将详细解释这些知识点: 1. **Struts2 JSON插件**:Struts2提供了一个JSON插件,允许Action直接返回JSON格式的数据,而无需额外...

    Struts2使用Annotation返回Json

    通过这种方式,Struts2结合注解和JSON插件,可以让开发人员更方便地处理JSON数据的返回,从而简化了Web应用的开发流程。同时,这种方式也使得代码更具有可读性和可维护性。记住,一定要确保Struts2的核心库和JSON...

    struts2与json整合

    例如,在前端使用jQuery等库发起AJAX请求,获取或发送JSON格式的数据,而在后端,Struts2框架则能够无缝处理这些JSON数据,从而构建出响应迅速、用户体验优秀的Web应用。 综上所述,Struts2与JSON的整合不仅提升了...

    struts2 1 8生成返回json 修正

    总结,Struts2 1.8的JSON支持简化了Java Web应用中JSON数据的处理,通过配置和注解,开发者可以轻松地在Action中生成JSON响应,并在客户端进行处理。在MyEclipse8.5这样的IDE中,可以高效地开发和调试此类项目。了解...

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

    当用户界面触发某个事件(比如点击按钮),jQuery会发起Ajax请求,Struts2 Action执行相关逻辑并生成JSON响应,最后jQuery将数据插入到网页中,完成一次完整的交互。 总结来说,这个例子展示了如何利用Struts2处理...

    整合jquery+json+struts2异步提交实例

    在这个实例中,“整合jquery+json+struts2异步提交”是一个典型的前端与后端交互的示例,利用了jQuery的Ajax功能和Struts2框架处理JSON数据。下面我们将详细探讨这些技术及其相互配合的工作原理。 **jQuery** 是一...

    jquery的ajax传json对象数组到struts2的action

    总结起来,将jQuery的AJAX与Struts2结合,可以通过JSON对象数组进行前后端的数据交互。在前端,利用`$.ajax()`发送JSON数据;在后端,Struts2 Action接收并处理这些数据。这种通信方式在现代Web应用中非常常见,因为...

    Jquery+Struts2+JSON处理

    综上所述,jQuery、Struts2和JSON的结合为Web应用提供了一种强大且灵活的数据交互机制,使前端能够实时更新内容,提升用户体验。同时,Struts2的Action和JSON插件使得服务器端数据的处理和返回变得简单易用。正确地...

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

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

Global site tag (gtag.js) - Google Analytics