云自無心水自閑

          天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
          posts - 288, comments - 524, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Struts2 and Ajax --使用Dojo和Div

          Posted on 2008-02-10 20:56 云自無心水自閑 閱讀(12237) 評論(8)  編輯  收藏 所屬分類: Java心得體會Struts2AjaxDojo

          Struts2和Struts相比,一個重大改進就是支持Ajax。 本文主要看一下Struts2中的Div是如何用來輸出Ajax結果,其中主要使用了Dojo。

          首先,我們先創建一個簡單的用例,在這個用例中,將在屏幕上顯示一個用戶列表,點擊列表中的userid時,列表的下方將顯示用戶的詳細信息,顯示用戶詳細信息的這個步驟我們將使用Ajax。

          一、創建web.xml

          <?xml version="1.0" encoding="UTF-8"?>
          <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
            
          <filter>
              
          <filter-name>struts2</filter-name>
              
          <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
            
          </filter>
            
          <filter-mapping>
              
          <filter-name>struts2</filter-name>
              
          <url-pattern>/*</url-pattern>
            
          </filter-mapping>
          </web-app>

          二、創建struts.xml
          <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
              "http://struts.apache.org/dtds/struts-2.0.dtd"
          >
          <struts>
              
          <package name="ajaxdemo" extends="struts-default">
                  
          <action name="UserListingAction" class="ajaxdemo.action.UserListingAction">
                      
          <result>/userlisting.jsp</result>
                  
          </action>
                  
          <action name="UserDetailAction" class="ajaxdemo.action.UserDetailAction">
                      
          <result>/userdetail.jsp</result>
                  
          </action>
              
          </package> 
          </struts>

          三、頁面:userlisting.jsp
          Displays list of users
          <%@ taglib prefix="s" uri="/struts-tags" %>
          <html>
            
          <head>
              
          <s:head theme="ajax"/>
              
            
          </head>
            
          <script>
              function show_user_details(id) {
                document.frm_user.userid.value = id;
                dojo.event.topic.publish("show_detail");
              }
            
          </script>
            
          <body>
              
          <s:form id="frm_user" name="frm_user">
                
          <h1>User Listing</h1>
                
          <s:if test="userList.size > 0">
                  
          <table border="1">
                    
          <s:iterator value="userList">
                      
          <tr>
                        
          <td>
                          
          <s:a href="#" onclick="javascript:show_user_details('%{id}');return false;"><s:property value="id" /></s:a>
                        
          </td>
                        
          <td>
                          
          <s:property value="name" />
                        
          </td>
                      
          </tr>
                    
          </s:iterator>
                  
          </table>
                
          </s:if> 
                
          <s:hidden name="userid"/>
                
          <s:url id="d_url" action="UserDetailAction" />
                
          <s:div  id="user_details" href="%{d_url}" theme="ajax" listenTopics="show_detail" formId="frm_user" >
                
          </s:div>
              
          </s:form>
            
          </body>
          </html>


          四、頁面:userdetail.jsp,用于顯示用戶詳細信息,由userlisting.jsp加載
          <%@ taglib prefix="s" uri="/struts-tags" %>
          <h1>User Details</h1>
          <s:if test="userDetails != null">
              
          <table>
                
          <tr><td>Id:</td><td><s:property value="userDetails.id" /></td></tr>
                
          <tr><td>Name:</td><td><s:property value="userDetails.name" /></td></tr>
                
          <tr><td>Email:</td><td><s:property value="userDetails.email" /></td></tr>
                
          <tr><td>Address:</td><td><s:property value="userDetails.address" /></td></tr>
              
          </table>
          </s:if>

          五、ajaxdemo.action.UserListingAction.java,生成用戶列表數據,交由userlisting.jsp顯示,在實際的應用中,這部分的數據一般是從數據庫中取得的。
          package ajaxdemo.action;

          import ajaxdemo.dto.UserListDTO;
          import com.opensymphony.xwork2.ActionSupport;
          import java.util.ArrayList;
          import java.util.List;

          /** Populates the user listing data */
          public class UserListingAction extends ActionSupport {

              
          private List<UserListDTO> userList; // this is available in view automatically!
              public String execute() throws Exception {
                  
                  
          // create 2 user objects and add to a list
                  setUserList((List<UserListDTO>new ArrayList());
                  UserListDTO user 
          = new UserListDTO();
                  user.setId(
          "gjose");
                  user.setName(
          "Grace Joseph");
                  getUserList().add(user);
                  
                  user 
          = new UserListDTO();
                  user.setId(
          "peter");
                  user.setName(
          "PeterSmith");
                  getUserList().add(user);
                  
          return SUCCESS;
              }


              
          public List<UserListDTO> getUserList() {
                  
          return userList;
              }


              
          public void setUserList(List<UserListDTO> userList) {
                  
          this.userList = userList;
              }

          }

          六、ajaxdemo.action.UserDetailAction.java,當userid被選中時,取得用戶詳細數據,通過dojo來調用。
          package ajaxdemo.action;

          import ajaxdemo.dto.UserDetailDTO;
          import com.opensymphony.xwork2.ActionSupport;

          /* Populates user details for a user id selected */
          public class UserDetailAction extends ActionSupport {
              
              
          private String userid;
              
          private UserDetailDTO userDetails;
              
              
          public String execute() throws Exception {
                  
          // populate only when userid is selected
                  if(userid!=null && !userid.equals(""))
                      populateDetail(userid);
                  
          return SUCCESS;
              }

              
              
          private void populateDetail(String id) {
                  userDetails 
          = new UserDetailDTO();
                  userDetails.setId(id);
                  userDetails.setName(
          "The Complete Name");
                  userDetails.setEmail(
          "admin@struts2.org");
                  userDetails.setAddress(
          "rich street, lavish road, Struts Land");
              }


              
          public String getUserid() {
                  
          return userid;
              }


              
          public void setUserid(String userid) {
                  
          this.userid = userid;
              }


              
          public UserDetailDTO getUserDetails() {
                  
          return userDetails;
              }


              
          public void setUserDetails(UserDetailDTO userDetails) {
                  
          this.userDetails = userDetails;
              }


          }


          七、ajaxdemo.action.UserDetailDTO.java、POJO,用于封裝用戶信息
          package ajaxdemo.dto;

          public class UserDetailDTO {

              
          private String id;
              
          private String name;
              
          private String email;
              
          private String address;

              
          public String getId() {
                  
          return id;
              }


              
          public void setId(String id) {
                  
          this.id = id;
              }


              
          public String getName() {
                  
          return name;
              }


              
          public void setName(String name) {
                  
          this.name = name;
              }


              
          public String getEmail() {
                  
          return email;
              }


              
          public void setEmail(String email) {
                  
          this.email = email;
              }


              
          public String getAddress() {
                  
          return address;
              }


              
          public void setAddress(String address) {
                  
          this.address = address;
              }

          }

          OK,部署完畢后,輸入http://localhost:8080/ajaxdemo/UserListingAction.action來測試一下。
          當列表中的userid被點中后,javaScript通知Div標簽從URL中動態加載返回內容。這個例子中,UserDetailAction取得用戶信息并傳遞給userdetail.jsp。userdetail.jsp生成最終的展示結果,顯示在Div中。


          評論

          # re: Struts2 and Ajax --使用Dojo和Div  回復  更多評論   

          2008-02-27 16:13 by border
          大哥:
          下次翻譯的時候能不能給個連接。
          http://www.struts2.org/struts2-and-ajax-using-dojo-div-part-i/

          # re: Struts2 and Ajax --使用Dojo和Div[未登錄]  回復  更多評論   

          2009-02-06 16:09 by gg
          哈哈,樓上的太有才了

          # re: Struts2 and Ajax --使用Dojo和Div  回復  更多評論   

          2009-02-09 19:55 by 無名氏
          即使是翻譯的也不錯,頂博主。

          # re: Struts2 and Ajax --使用Dojo和Div  回復  更多評論   

          2009-04-04 18:48 by aring
          是不是少了個ajaxdemo.dto.UserListDTO。java啊?

          # re: Struts2 and Ajax --使用Dojo和Div[未登錄]  回復  更多評論   

          2009-05-17 04:14 by lfc
          package ajaxdemo.dto;

          public class UserListDTO {
          private String id;
          private String name;
          private String email;
          private String address;
          public String getId() {
          return id;
          }
          public void setId(String id) {
          this.id = id;
          }
          public String getName() {
          return name;
          }
          public void setName(String name) {
          this.name = name;
          }
          public String getEmail() {
          return email;
          }
          public void setEmail(String email) {
          this.email = email;
          }
          public String getAddress() {
          return address;
          }
          public void setAddress(String address) {
          this.address = address;
          }
          }

          # re: Struts2 and Ajax --使用Dojo和Div  回復  更多評論   

          2009-06-17 01:55 by 含笑半步癲
          2樓的仁兄真逗..謝謝你.給了原裝的,使我對這個例子又恢復了信心.哈哈...

          # re: Struts2 and Ajax --使用Dojo和Div[未登錄]  回復  更多評論   

          2010-01-06 15:21 by 初學者
          按照樓主提供的源碼,在IDE中運行了,在DetailAction處理的時候一直得不到從List頁面傳遞過來的ID值,導致不能顯示用戶的詳細信息。不知道是我拷貝時候出了問題還是代碼原本有問題!
          最后通過request獲取List頁面<s:hidden name="userid"></s:hidden>的id值得以解決。

          # re: Struts2 and Ajax --使用Dojo和Div  回復  更多評論   

          2010-07-19 11:44 by jsq
          用不了啊。
          主站蜘蛛池模板: 桂阳县| 朝阳区| 竹北市| 德兴市| 沂水县| 启东市| 抚顺市| 廉江市| 保定市| 东海县| 汕尾市| 华蓥市| 台南县| 桃园县| 临猗县| 三都| 东乡| 山阳县| 巫山县| 青河县| 南郑县| 贺州市| 邹平县| 泽州县| 伽师县| 十堰市| 东乌珠穆沁旗| 南投市| 浮梁县| 文水县| 枝江市| 武乡县| 团风县| 棋牌| 浦县| 观塘区| 新民市| 乐清市| 遂平县| 连州市| 临澧县|