Struts2与JSON

来源:互联网 发布:ubuntu wine qq乱码 编辑:程序博客网 时间:2024/05/19 13:16

1.   必需的库

struts2-json-plugin-2.1.8.1.jar

json-lib-2.1.jar

版本号可能会有所不同,而且这两个包也是MyEclipse在创建Struts2项目时自带并且已经包含的。

2.   setter与getter

Action类中私有成员变量的setter和getter方法在Struts2框架下会被自动转化成HttpServletRequest对象的getParameter方法和setAttribute方法,也就是说setter方法的实质就是从request中取出名字与变量名相同的数据,并将其赋值给该变量;而getter方法就是将变量名与值分别作为key和value存入request对象的attribute中。

理解了这一点,显而易见,不需要反馈到View层的Action私有变量是没有必要设置它的getter方法的。这在JSON生成之中尤为重要,因为多余的getter方法会把私有变量的值传递到JSON之中。

3.   Action类中JSON的生成机制

需要生成JSON的Action最好不要实现ModelDriven接口,其原因正如上所述,实现了ModelDriven接口的Action类必须实现getModel方法,其导致的结果就是生成的JSON数据中有一串名为“model”的数据。它可能会暴露一些并不需要客户端知道的数据,同时也会增加JSON数据的大小。

JSON数据在Action类中是根据getter方法的返回值自动装配的,也就是说完全可以不需要重写execute方法。JSON的生成机制(上述两个必需的包中提供的方法)会直接从setter方法获取到request中提供的值,并且自动装配getter方法提供的返回值。期间如果有其它的功能操作,如计算、查询数据库、重组数据等,可以写到getter方法中,也可以写到execute方法中统一执行。

这里需要注意的是execute方法的返回值字符串是无效的,可以随意设置,因为在后面的配置文件中并不会用到。

getter方法返回值的类型可以采用基本数据类型、String类、集合类(List、Map等)以及诸如Double、Integer等打包类。这些都不会影响JSON的生成,因为对于结果而言都是字符串类型的;而集合类在生成时会被自动迭代,因此生成的结果中其本身的集合类型(列表、映射表等)也不会改变。

因此在Action类可以将所有的结果数据保存到一个List或Map中在通过getter方法输出,也可以设置多个getter方法返回不同类型、不同变量的数据。这些数据在JSON中的名称与getter方法名中一致。

4.   配置文件的设定

与基本的Action相比,生成JSON的Action在配置文件struts.xml中主要有两点不同:

1.      不能与基本的Action配置在同一个package中,新的package必须扩展自(extends)json-default命名空间;

2.      result标签中可以不包含name属性(因为没用),但是必须包含type属性,且值必须为“json”,即<result type=”json” ></result>,表明这是一个JSON数据,不需要跳转页面。

5.   示例

JsonAction类:

[java] view plaincopy
  1. package com;  
  2.    
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.    
  8. import com.opensymphony.xwork2.ActionSupport;  
  9.    
  10. public class JsonAction extends ActionSupport {  
  11.    
  12.     private static final long serialVersionUID = 4905130009784850861L;  
  13.      
  14.     private String username;  
  15.     private String password;  
  16. //  private List<String> result;  
  17.     private Map<String, String> map;  
  18.      
  19.     public void setUsername(String username) {  
  20.        this.username = username;  
  21.     }  
  22.     public void setPassword(String password) {  
  23.        this.password = password;  
  24.     }  
  25.      
  26. //  public List<String> getResult() {  
  27. //     return this.result;  
  28. //  }  
  29.     public Map<String, String> getResult() {  
  30.        return map;  
  31.     }  
  32.    
  33.     public String execute() {  
  34. //     result = new ArrayList<String>();  
  35. //     result.add(username);  
  36. //     result.add(password);  
  37.        map = new HashMap<String, String>();  
  38.        map.put("usr", username);  
  39.        map.put("pwd", password);  
  40.        map.put("logon""true");  
  41.         
  42.        return SUCCESS;  
  43.     }  
  44. }  

struts.xml:

[html] view plaincopy
  1. <?xml version="1.0"encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC "-//ApacheSoftware Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">  
  3. <struts>  
  4.     <constant name="struts.devMode" value="true"></constant>  
  5.      
  6.     <package name="json" extends="json-default">  
  7.        <action name="loginJson"class="com.JsonAction">  
  8.            <result type="json"></result>  
  9.        </action>  
  10.     </package>  
  11. </struts>     

结果:


转载自:  http://blog.csdn.net/sadfishsc/article/details/8768197

0 0
原创粉丝点击