struts2+jquery+json

struts2.1.8.1+jquery1.4.2返回json数据

一、引入包

json-lib-2.1.jar

jsonplugin-0.33.jar

……………………其它依赖包……………………..

二、后台

2.1  UserInfo.java实体类

         public class UserInfo implements Serializable {  

            private int userId; 

            private String userName;

            private String password;

              get set方法略

}

2.2  action类

                   publicclass 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;  

  }  

}

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

                   <packagename="default" namespace="/json"extends="json-default">

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

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

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

</result>  

</action>

<action name="returnUser "

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

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

<paramname="includeProperties">

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

</param>        

</result>  

</action>

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

 method="returnList">  

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

<paramname="includeProperties">

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

</param>

</result>  

</action>

</package>

三、前台

3.1 页面引入jquery-1.4.2.js

3.2 代码如下:

<scriptlanguage="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>

<divid="result"></div>

<input type="button"value="获得单个消息" οnclick="getMsg()"/>

<input type="button"value="获得用户信息" οnclick="getUser()"/>

<input type="button"value="获得用户列表" οnclick="getUserList()"/>

3.3 只要继承extends="json-default"

result type设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做),然后调用ajax的callback方法. 返回json数据

3.4  includeProperties 参数

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

 

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

 

<result type="json">

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

  userInfo \. userName </param>

</result>        

3.5 excludeProperties 参数

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

3.6 输出一个JSONList列表

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

<paramname="includeProperties">

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

</param>

</result>

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

 

四、总结

4.1为什么要用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注解。

 

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

 

 



                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值