zoukankan      html  css  js  c++  java
  • Struts2使用json中要注意的几点

    1.引入包

    struts2-json-plugin-2.1.8.1.jar  json-lib-2.1.jar  commons-collections-3.2.1.jar  commons-beanutils-1.8.2.jar  commons-lang-2.4.jar  ezmorph-1.0.6.jar,其他的包略,这几个包是返回json形式的数据必须的

    2.struts配置

    <package name="default" extends="json-default">
    3.action配置

    <action name="test" class="com.TestAction" method="test">  
      <interceptor-ref name="json" /><!--处理以JSON文本提交的请求-->  
      <result type="json" /><!--将action的bean属性以json字符串返回浏览器-->  
      </action>
    4.包的配置

    只要继承extends="json-default",json拦截器是默认配置上的,可以不配。result设置成json之后,容器会把 action的属性自动封装到一个json对象中(json拦截器来做),然后调用js的callback方法. 返回json数据<package name="test" namespace="/test" extends="struts-default,json-default">
    5.如果按照 3中的配置

    你会发现前台返回的json字符串,是把action中的所有属性全部转化为json字符串返回给浏览器了(甚至有时候返回不了结果,也不报错,后台执行了,但前台执行不到callback function),但是我们有时候需要根据实际情况返回部分结果,如何对json的结果进行定制输出呢?result提供了一些参数替你解决这个问题,一般情况下用的最多的就是includeProperties 参数和excludeNullProperties参数。当然还有其他的方法,如给pojo的属性加json注解。
    6.includeProperties 参数

    输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。这个参数直接返回对象的json数据,前台不需要 eval转换,<param name="root">result</param>则不同,需要前台进行eval转换
    如:输出person的所有属性
    <result type="json">  
       <param name="includeProperties">person.*, person\.name</param>  
    </result>
    7.excludeProperties 参数

    输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties
    8.输出一个JSON List列表
    <action name="list" class="testAction" method="list">    
    <result name="success" type="json">
    <param name="includeProperties">
    list\[\d+\]\.Id,list\[\d+\]\.user\.userName
    </param>
    </result>       
    </action>  
    其中list是action中的一个List类型的属性
    list\[\d+\]\.Id表示,list中存储的对象0..end的Id属性(list中存储的对象必须有Id属性)。
    list\[\d+\]\.user\.userName就表示list中的对象中的user对象的userName属性

    9.为什么要用includeProperties或者excludeProperties 参数
    主要是为了过滤掉接口,pojo的set、list、其他对象等不需要的数据防止循环取其他对象或找不到。如果不配置,默认是处理action中的所有属性,如果action中有接口注入,json拦截器可能找不到返回不了结果,还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,如果其他对象有list、set,其返回结果...有可能是死循环,无法返回10.总结action中避免使用get开头的action方法,去掉action中的接口的get方法为json类型的result配置includeProperties, excludeProperties等参数.

  • 相关阅读:
    Android编程动态创建视图View的方法
    ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)
    SQL 2008 数据库迁移
    Response.Write具体介绍
    美国地名大全(美国城市名称英文、中文)
    MySQL 暂时文件夹
    任务管理器进程中多个chrome.exe的问题
    PNG文件格式具体解释
    秒杀多线程第四篇 一个经典的多线程同步问题
    Metropolis Hasting算法
  • 原文地址:https://www.cnblogs.com/ningvsban/p/3055133.html
Copyright © 2011-2022 走看看