首页 > 其他分享 >struts2.1.8.1+jquery1.4.2返回json数据

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

时间:2023-09-20 15:02:31浏览次数:52  
标签:8.1 userInfosList userName jquery1.4 struts2.1 jar json userInfo action


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="获得单个消息" οnclick="getMsg()"/> 
<input type="button" value="获得用户信息" οnclick="getUser()"/> 
<input type="button" value="获得用户列表" οnclick="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等参数.

标签:8.1,userInfosList,userName,jquery1.4,struts2.1,jar,json,userInfo,action
From: https://blog.51cto.com/u_16242566/7537263

相关文章

  • struts2.1 + Spring 3.X + hibernate3.X架构搭建问题记录
    目前正在试图搭建一个SSH的架构,之前在myeclipse8.6+ssh(struts2.1,spring2.5,hibernate3) +mysql+tomcat6.0做过例子,当时有老师带着,遇到问题也都解决了。而且,自己练习单表的增删改查时也能独立完成了。但是现在换成了myeclipse2014+orcle后,就是通不过去,郁闷中:现在想一遍解......
  • Mysql8.0升级到8.1
    1.官网下载8.1版本本次选择的zip的方式,也可选择MSI的方式(MSI文件下载后双击即可安装)   2.备份旧版中的数据库(使用Navicate工具做的备份)命令方式备份数据:mysqldump-uroot-proot-h127.0.0.1-P3306--all-databases>“F:\MySQL\MySQLServer8.0\data\backup.sql”3......
  • Android基础入门教程——8.1.1 Android中的13种Drawable小结 Part 1
    本节引言:从本节开始我们来学习Android中绘图与动画中的一些基础知识,为我们进阶部分的自定义 打下基础!而第一节我们来扣下Android中的Drawable!Android中给我们提供了多达13种的 Drawable,本节我们就来一个个撸一遍!Drawable资源使用注意事项Drawable分为两种: 一种是我们普通的图片......
  • Windows安装MySQL Community Server 8.1.0 Innovation
    检查是否安装按win+r打开运行,输入services.msc回车在服务列表中查找mysql服务,如果存在mysql服务,说明已经安装mysql。反之,则说明没有安装了mysql服务。下载并安装下载链接:https://dev.mysql.com/downloads/mysql/MySQLCommunityServer8.1.0Innovation有msi版本......
  • navicate 连接mysql8.1
    1问题描述安装好mysql8.1,使用navicate连接,报错Clientdoesnotsupportauthenticationprotocolrequestedbyserver; 2解决1)命令行登录mysqlmysql-hlocalhost-P3306-u用户-p密码 2)执行命令修改加密规则ALTERUSER'root'@'localhost'IDENTI......
  • 文心一言 VS 讯飞星火 VS chatgpt (83)-- 算法导论8.1 4题
    四、用go语言,假设现有一个包含n个元素的待排序序列。该序列由n/k个子序列组成,每个子序列包含k个元素。一个给定子序列中的每个元素都小于其后继子序列中的所有元素,且大于其前驱子序列中的每个元素。因此,对于这个长度为n的序列的排序转化为对n/k个序列中的k个元素的排序。试证......
  • ubuntu(linux):安装node(v18.17.1)
     一,访问官网https://nodejs.org/en得到下载包地址:二,下载/解压下载:root@lhdpc:/usr/local/source/node#wgethttps://nodejs.org/dist/v18.17.1/node-v18.17.1-linux-x64.tar.xz解压:root@lhdpc:/usr/local/source/node#xz-dnode-v18.17.1-linux-x64.tar.xzro......
  • KubeSphere 社区双周报 | KubeKey 新增网络插件 Hybridnet | 2023.08.18-08.31
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.08.18-2023.08.31。贡献者名单新晋KubeSphereCon......
  • 192.168.1.1/24能不能ping通192.168.1.2/25?
    我在这个博客中提出的相应的想法,之后我就“CiscoPacketTracer”模拟了一下网络环境,发现是可以ping通的。把PC1的IP地址改成192.168.1.129/25后就直接请求超时:......
  • 文心一言 VS 讯飞星火 VS chatgpt (83)-- 算法导论8.1 4题
    四、用go语言,假设现有一个包含n个元素的待排序序列。该序列由n/k个子序列组成,每个子序列包含k个元素。一个给定子序列中的每个元素都小于其后继子序列中的所有元素,且大于其前驱子序列中的每个元素。因此,对于这个长度为n的序列的排序转化为对n/k个序列中的k个元素的排序。试证......