Struts2 json plugin实战3 - JSON RPC

jopen 13年前
     <p>1. 首先是在struts2的工程里添加struts2-json-plugin.xxx.jar库,如果是使用的maven,添加以下dependency</p>    <p></p>    <pre class="brush:xml; toolbar: true; auto-links: false;"> <dependency>   <groupId>org.apache.struts</groupId>   <artifactId>struts2-json-plugin</artifactId>   <version>2.1.8.1</version>  </dependency></pre>     <p></p>    <p> </p>    <p>2. 创建Action类和一个用到的User类</p>    <p>Action类内容</p>    <p></p>    <pre class="brush:java; toolbar: true; auto-links: false;">import com.opensymphony.xwork2.Action; import java.util.ArrayList; import java.util.List; import org.apache.struts2.json.annotations.SMDMethod; public class JSONExample3 {  private List<User> userList = new ArrayList<User>();    public String execute() {   return Action.SUCCESS;  }  @SMDMethod  public List<User> getMyUserList(int size) {   for (int i = 0; i < size; i++) {    User user = new User("id_" + i, "username_" + i, "password_" + i, "desc_" + i);    userList.add(user);   }   return userList;  }  public List<User> getUserList() {   return userList;  }  public void setUserList(List<User> userList) {   this.userList = userList;  } }</pre>     <p></p>    <p> </p>    <p>User类内容</p>    <p></p>    <pre class="brush:java; toolbar: true; auto-links: false;">import java.io.Serializable; public class User implements Serializable {  private static final long serialVersionUID = 1L;    private String id;  private String username;  private String password;  private String description;    public User() {  }  public User(String id, String username, String password, String description) {   this.id = id;   this.username = username;   this.password = password;   this.description = description;  }    public String getId() {   return id;  }  public void setId(String id) {   this.id = id;  }  public String getUsername() {   return username;  }  public void setUsername(String username) {   this.username = username;  }    public String getPassword() {   return password;  }  public void setPassword(String password) {   this.password = password;  }    public String getDescription() {   return description;  }  public void setDescription(String description) {   this.description = description;  } }</pre>     <p></p>    <p> </p>    <p>3. Spring配置文件</p>    <p></p>    <pre class="brush:xml; toolbar: true; auto-links: false;"><?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xmlns:aop="http://www.springframework.org/schema/aop"        xmlns:lang="http://www.springframework.org/schema/lang"        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd                            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd                            http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd"        default-lazy-init="true">  <bean id="jsonExample3" class="JSONExample3" scope="prototype"/> </beans></pre>     <p></p>    <p> </p>    <p>4. Struts2配置文件</p>    <p></p>    <pre class="brush:xml; toolbar: true; auto-links: false;"><?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts>    <include file="struts-default.xml" />  <package name="json" namespace="/json" 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>   <action name="smdAction" class="jsonExample3">    <interceptor-ref name="json">     <param name="enableSMD">true</param>    </interceptor-ref>    <result type="json">     <param name="enableSMD">true</param>    </result>   </action>  </package> </struts></pre>     <p></p>    <p> </p>    <p>5. 新建一个jsp文件json.jsp用来做测试</p>    <p></p>    <pre class="brush:xml; toolbar: true; auto-links: false;"><html>  <head>   <title></title>   <mce:script type="text/javascript" src="http://www.google.com/jsapi?key=helloworld" mce_src="http://www.google.com/jsapi?key=helloworld"></mce:script>   <mce:script type="text/javascript"><!--    google.load("jquery", "1.4.1");    google.load("dojo", "1.1");        function testSmdAction() {     //create service object(proxy) using SMD (generated by the json result)     var service = new dojo.rpc.JsonService("/json/smdAction.action");          //execute remote method     var defered = service.getMyUserList(10);          //attach callback to defered object     defered.addCallback(function(data) {      var s = "";      for (var idx = 0; idx < data.length; idx++) {       s += "user["+idx+"].id=" + data[idx].id + "/n";      }      alert(s);     });    }    function init() {     dojo.require("dojo.io.script");     dojo.require("dojo.rpc.JsonService");    }    // --></mce:script>  </head>  <body style="margin: 20px;" mce_style="margin: 20px;" onload="init();">   <h3>json test</h3>   <ul>    <li><a href="#" mce_href="#" onclick="testSmdAction()">SMD Action</a></li>   </ul>  </body> </html></pre>     <p></p>    <p> </p>    <p> </p>    <p>6. 启动web容器测试,可以使用Tomcat或者maven自带的jetty,然后访问</p>    <p>  http://localhost:8080/json/json.jsp</p>    <p>  此时可以点击页面上的链接来测试结果。</p>    <p> </p>    <p>参考:https://cwiki.apache.org/confluence/display/WW/JSON%20Plugin</p>    <div></div>    <p> </p>