• struct2-json


    一、JSON是什么?

    :JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解

    析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C , C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

    二 、struts2对于JSON有什么支持?

    :struts2提供了一个struts2-json-plugin.jar 用于支持JSON的使用。当我们在struts2中使用JSON的时候必须导入struts2-json-plugin.jar

    并且需要一下几点:

    //struts2-json-plugin.jar中struts-plugin.xml配置信息:
    
          <struts>
    
            <package name="json-default" extends="struts-default">
    
              <result-types>
    
                 <result-type name="json" class="org.apache.struts2.json.JSONResult"/>
    
              </result-types>
    
               <interceptors>
    
                <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>

       </interceptors> </package>

    </struts>

    通过配置信息我们可以知道:

      1.json-default其实是继承了struts-default的

      2.定义了一个name为json的返回类型和一个name为json的拦截器 

      3.<action name="*" class="*">

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

       </action>

         //我们需要将result的 返回类型定义为json

    三、关于JSON在struts.xml中的一些属性的功能。

    <action name="*"  class="*">
      <result name="success" type="json">
        <param name=""></param>//关于对JSON的一些定义
    
        /*excludeProperties   //代表排除Action中的哪些属性,排除多个属性时,使用逗号进行分隔(即不需要序列化的属性)
        例:
        <param name="excludeProperties">age</param>  排除getAge()这个方法
    
        includeProperties   //代表包含Action中的哪些属性,包含多个属性是,使用逗号进行分隔(即需要序列化的属性)
        例:
        <param name="includeProperties">address</param>包含getAddress()
    
        excludeNullProperties //代表排除Action中属性值为空的字段
        例:
        <param name="excludeNullProperties">true</param> 
        使用true/false 默认为false(即包含属性值为null的字段)
    
        root  //代表从哪里开始序列化
        例:
        <param name="root">person</param> person对应的可以是一个属性,也可以是一个对象,也可以是一个集合
        //当在这里定义后,只会将person进行序列化,如果person是一个对象,则会将person对象中所有的getter方法都进行序列化
    
        注意:如果相同属性同时定义了excludeProperties和includeProperties
        那么excludeProperties的优先级要高,因此不对
        该属性进行序列化
        */
      </result>
    </action>
     

    四、关于JSON在Action对象中注解的使用。

    :对于JSON的注解主要有一下几个属性可以定义
    name:指定序列化的时候对应的名称
    例:
      @JSON(name = "myname") 
      {
        myname:"张三"
      } 
      
      public String getUsername() {
        return username;
      }
    
    serialize:对该方法进行序列化  true/false
    
    例:
      @JSON(serialize=true) 对该方法序列化,如果为false则不进行序列化
      public String getUsername() {
        return username;
      }
    
    deserialize:不对该方法进行序列化  true/false
    
    例:
      @JSON(deserialize=true) 不对该方法序列化,如果为false则进行序列化
      public String getUsername() {
        return username;
      }
    
    format:设置JSON对该方法的转换方式,一般用于对时间进行转换 
    
    例:
      @JSON(format="yyyy-MM-dd")  则客户端接收的JSON中date对应的值为:
      {
        date:"2011-10-2"
      }
      public Date getDate() {
        return date;
      }

    五、具体的实例:

    Action: 

         package org.viancent.action;  
      
          import java.util.Date;  
          import org.apache.struts2.json.annotations.JSON;  
          import com.opensymphony.xwork2.ActionSupport; 
      
    public class GetJsonAction extends ActionSupport { private String username; private String password; private int age; private Date date; @JSON(serialize = false) public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @JSON(name="mypassword") public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @JSON(format="yyyy-MM-dd") public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } @Override public String execute() throws Exception { this.setDate(new Date()); this.setAge(10); this.setPassword("world"); this.setUsername("hello"); return SUCCESS; } }

    struts.xml:

    <struts>  
        <package name="struts2"  extends="json-default">  
        //这里一定要继承json-default  
            <action name="getjsons" class="org.viancent.action.GetJsonAction">  
                <result name="success"  type="json">  
                //这里一定要定义type属性为json  
                    <param name="excludeProperties">age</param>       
                //排除getAge()方法            
                </result>  
            </action>  
      
        </package>  
    </struts>  

     JSP:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    <html>  
        <head>  
            <script type="text/javascript" src="WEB-JS/jquery-1.5.1.js"></script>   //使用jquery一定要导入js  
    <script type="text/javascript"> //使用jquery实现异步提交 function getJson() { $.post( "/struts2/getjsons.action",{},
                    function(returnedData,status) { if("success"==status) { alert(returnedData); } } ) } </script> </head> <body id="theBody"> <input type="button" value="GetJson" onclick="getJson();"> </body> </html>

    得到的结果为:

    {"date":"2011-03-21","mypassword":"world"} 

  • 相关阅读:
    .emacs
    boost 程序库完全开发指南_ch3_memory_manager
    C++ 友元函数
    AutoHotKey.ini
    QQ因系统日期无法打开
    SharePoint 2007中如何更改用戶基本資料(EMail地址)
    盗版Windows XP如何安装IE7
    三人行,必有我師學會了家中布線ADSL上網
    以數據源方式讀取文本文件連接串及注事事項
    网络访问时you might not have permission to use this network resource错误解决方法
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4743761.html
Copyright © 2020-2023  润新知