云自無(wú)心水自閑

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

          日歷

          <2008年2月>
          272829303112
          3456789
          10111213141516
          17181920212223
          2425262728291
          2345678

          隨筆檔案

          積分與排名

          • 積分 - 1129211
          • 排名 - 27

          最新評(píng)論

          Struts2和Struts相比,一個(gè)重大改進(jìn)就是支持Ajax。 本文主要看一下Struts2中的Div是如何用來(lái)輸出Ajax結(jié)果,其中主要使用了Dojo。

          首先,我們先創(chuàng)建一個(gè)簡(jiǎn)單的用例,在這個(gè)用例中,將在屏幕上顯示一個(gè)用戶列表,點(diǎn)擊列表中的userid時(shí),列表的下方將顯示用戶的詳細(xì)信息,顯示用戶詳細(xì)信息的這個(gè)步驟我們將使用Ajax。

          一、創(chuàng)建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>

          二、創(chuàng)建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>

          三、頁(yè)面: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>


          四、頁(yè)面:userdetail.jsp,用于顯示用戶詳細(xì)信息,由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,生成用戶列表數(shù)據(jù),交由userlisting.jsp顯示,在實(shí)際的應(yīng)用中,這部分的數(shù)據(jù)一般是從數(shù)據(jù)庫(kù)中取得的。
          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,當(dāng)userid被選中時(shí),取得用戶詳細(xì)數(shù)據(jù),通過(guò)dojo來(lái)調(diào)用。
          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來(lái)測(cè)試一下。
          當(dāng)列表中的userid被點(diǎn)中后,javaScript通知Div標(biāo)簽從URL中動(dòng)態(tài)加載返回內(nèi)容。這個(gè)例子中,UserDetailAction取得用戶信息并傳遞給userdetail.jsp。userdetail.jsp生成最終的展示結(jié)果,顯示在Div中。


          評(píng)論

          # re: Struts2 and Ajax --使用Dojo和Div  回復(fù)  更多評(píng)論   

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

          # re: Struts2 and Ajax --使用Dojo和Div[未登錄](méi)  回復(fù)  更多評(píng)論   

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

          # re: Struts2 and Ajax --使用Dojo和Div  回復(fù)  更多評(píng)論   

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

          # re: Struts2 and Ajax --使用Dojo和Div  回復(fù)  更多評(píng)論   

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

          # re: Struts2 and Ajax --使用Dojo和Div[未登錄](méi)  回復(fù)  更多評(píng)論   

          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  回復(fù)  更多評(píng)論   

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

          # re: Struts2 and Ajax --使用Dojo和Div[未登錄](méi)  回復(fù)  更多評(píng)論   

          2010-01-06 15:21 by 初學(xué)者
          按照樓主提供的源碼,在IDE中運(yùn)行了,在DetailAction處理的時(shí)候一直得不到從List頁(yè)面?zhèn)鬟f過(guò)來(lái)的ID值,導(dǎo)致不能顯示用戶的詳細(xì)信息。不知道是我拷貝時(shí)候出了問(wèn)題還是代碼原本有問(wèn)題!
          最后通過(guò)request獲取List頁(yè)面<s:hidden name="userid"></s:hidden>的id值得以解決。

          # re: Struts2 and Ajax --使用Dojo和Div  回復(fù)  更多評(píng)論   

          2010-07-19 11:44 by jsq
          用不了啊。
          主站蜘蛛池模板: 通州市| 忻城县| 七台河市| 远安县| 临夏县| 绥芬河市| 马鞍山市| 普宁市| 周口市| 唐山市| 闻喜县| 晋中市| 奉贤区| 九台市| 香港| 华容县| 九龙坡区| 湘潭市| 鄱阳县| 双鸭山市| 永年县| 独山县| 扶余县| 应用必备| 巴青县| 张家港市| 锦州市| 镇远县| 鸡东县| 海晏县| 饶河县| 甘谷县| 罗源县| 田东县| 丰原市| 芜湖市| 咸宁市| 莱州市| 巩义市| 抚州市| 卫辉市|