struts2.1.8 +dojo 的ajax方式

首先,我们先创建一个简单的用例,在这个用例中,将在屏幕上显示一个用户列表,点击列表中的userid时,列表的下方将显示用户的详细信息,显示用户详细信息的这个步骤我们将使用Ajax。

本次实例使用myeclipse8.5,并加载struts2和dojo(struts2-dojo-plugin-2.1.8.1.jar)支持。

一、修改web.xml

    增加过滤器:

  <filter-mapping>
    
<filter-name>struts2</filter-name>
    
<url-pattern>/*</url-pattern>
  
</filter-mapping>

 

二、修改struts.xml

    增加如下包

     <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> 

 

三、JSP页面:显示用户列表 userlisting.jsp

 

  1. <%@ taglib prefix="s" uri="/struts-tags"%>     
  2. <%@ taglib prefix="sx" uri="/struts-dojo-tags"%>    
  3. <html>   
  4.    <head>     
  5.         <title>It 's MyTest!</title>     
  6.         <sx:head />   
  7.     </head>     
  8.   <mce:script type="text/javascript"><!--   
  9.     function show_user_details(id) {   
  10.       document.frm_user.userid.value = id;   
  11.       dojo.event.topic.publish("show_detail");   
  12.     }   
  13.      
  14. // --></mce:script>   
  15.   <body>   
  16. hello!   
  17.     <s:form id="frm_user" name="frm_user">   
  18.       <h1>User Listing</h1>   
  19.       <s:if test="userList.size > 0">   
  20.         <table border="1">   
  21.           <s:iterator value="userList">   
  22.             <tr>   
  23.               <td>   
  24.                 <s:a href="#" mce_href="#" οnclick="javascript:show_user_details('%{id}');return false;"><s:property value="id" /></s:a>   
  25.               </td>   
  26.               <td>   
  27.                 <s:property value="name" />   
  28.               </td>   
  29.             </tr>   
  30.           </s:iterator>   
  31.         </table>   
  32.       </s:if>    
  33.       <s:hidden name="userid"/>   
  34.       <s:url id="d_url" action="UserDetailAction" />   
  35.       <sx:div  id="user_details" href="%{d_url}" mce_href="%{d_url}" theme="ajax" listenTopics="show_detail" formId="frm_user" >   
  36.       </sx:div>   
  37.     </s:form>   
  38.   </body>   
  39. </html>  

 

四、页面:userdetail.jsp,用于显示用户详细信息,由userlisting.jsp加载

 

  1. <%@ taglib prefix="s" uri="/struts-tags" %>   
  2. <h1>User Details</h1>   
  3. <s:if test="userDetails != null">   
  4.     <table>   
  5.       <tr><td>Id:</td><td><s:property value="userDetails.id" /></td></tr>   
  6.       <tr><td>Name:</td><td><s:property value="userDetails.name" /></td></tr>   
  7.       <tr><td>Email:</td><td><s:property value="userDetails.email" /></td></tr>   
  8.       <tr><td>Address:</td><td><s:property value="userDetails.address" /></td></tr>   
  9.     </table>   
  10. </s:if>  

 

五、ajaxdemo.action.UserListingAction.java,生成用户列表数据,交由userlisting.jsp显示,在实际的应用中,这部分的数据一般是从数据库中取得的。

 

  1. package ajaxdemo.action;   
  2.   
  3. import ajaxdemo.dto.UserListDTO;   
  4. import com.opensymphony.xwork2.ActionSupport;   
  5. import java.util.ArrayList;   
  6. import java.util.List;   
  7.   
  8. /** *//** Populates the user listing data */  
  9. public class UserListingAction extends ActionSupport {   
  10.   
  11.     private List<UserListDTO> userList; // this is available in view automatically!   
  12.     public String execute() throws Exception {   
  13.            
  14.         // create 2 user objects and add to a list   
  15.         System.out.println("*********1");    
  16.         setUserList((List<UserListDTO>) new ArrayList());   
  17.         UserListDTO user = new UserListDTO();   
  18.         user.setId("gjose");   
  19.         user.setName("Grace Joseph");   
  20.         getUserList().add(user);   
  21.            
  22.         user = new UserListDTO();   
  23.         user.setId("peter");   
  24.         user.setName("Peter Smith");   
  25.         getUserList().add(user);   
  26.         System.out.println("*********2");    
  27.         return SUCCESS;   
  28.     }   
  29.   
  30.     public List<UserListDTO> getUserList() {   
  31.         return userList;   
  32.     }   
  33.   
  34.     public void setUserList(List<UserListDTO> userList) {   
  35.         this.userList = userList;   
  36.     }   
  37. }  

 

六、ajaxdemo.action.UserDetailAction.java,当userid被选中时,取得用户详细数据,通过dojo来调用。

 

  1. package ajaxdemo.action;   
  2.   
  3. import ajaxdemo.dto.UserDetailDTO;   
  4. import com.opensymphony.xwork2.ActionSupport;   
  5.   
  6. /**//* Populates user details for a user id selected */  
  7. public class UserDetailAction extends ActionSupport {   
  8.        
  9.     private String userid;   
  10.     private UserDetailDTO userDetails;   
  11.        
  12.     public String execute() throws Exception {   
  13.         // populate only when userid is selected   
  14.         if(userid!=null && !userid.equals(""))   
  15.             populateDetail(userid);   
  16.         return SUCCESS;   
  17.     }   
  18.        
  19.     private void populateDetail(String id) {   
  20.         userDetails = new UserDetailDTO();   
  21.         userDetails.setId(id);   
  22.         userDetails.setName("The Complete Name");   
  23.         userDetails.setEmail("admin@struts2.org");   
  24.         userDetails.setAddress("rich street, lavish road, Struts Land");   
  25.     }   
  26.   
  27.     public String getUserid() {   
  28.         return userid;   
  29.     }   
  30.   
  31.     public void setUserid(String userid) {   
  32.         this.userid = userid;   
  33.     }   
  34.   
  35.     public UserDetailDTO getUserDetails() {   
  36.         return userDetails;   
  37.     }   
  38.   
  39.     public void setUserDetails(UserDetailDTO userDetails) {   
  40.         this.userDetails = userDetails;   
  41.     }   
  42.   
  43. }  

 

七、ajaxdemo.dto.UserListDTO.java、POJO,用于封装用户信息

 

  1. package ajaxdemo.dto;   
  2.   
  3. public class UserListDTO {   
  4. private String id;   
  5. private String name;   
  6. private String email;   
  7. private String address;   
  8. public String getId() {   
  9. return id;   
  10. }   
  11. public void setId(String id) {   
  12. this.id = id;   
  13. }   
  14. public String getName() {   
  15. return name;   
  16. }   
  17. public void setName(String name) {   
  18. this.name = name;   
  19. }   
  20. public String getEmail() {   
  21. return email;   
  22. }   
  23. public void setEmail(String email) {   
  24. this.email = email;   
  25. }   
  26. public String getAddress() {   
  27. return address;   
  28. }   
  29. public void setAddress(String address) {   
  30. this.address = address;   
  31. }   
  32. }   

 

八、ajaxdemo.dto.UserDetailDTO.java、POJO,用于封装用户信息

 

  1. package ajaxdemo.dto;   
  2.   
  3. public class UserDetailDTO {   
  4.   
  5.     private String id;   
  6.     private String name;   
  7.     private String email;   
  8.     private String address;   
  9.   
  10.     public String getId() {   
  11.         return id;   
  12.     }   
  13.   
  14.     public void setId(String id) {   
  15.         this.id = id;   
  16.     }   
  17.   
  18.     public String getName() {   
  19.         return name;   
  20.     }   
  21.   
  22.     public void setName(String name) {   
  23.         this.name = name;   
  24.     }   
  25.   
  26.     public String getEmail() {   
  27.         return email;   
  28.     }   
  29.   
  30.     public void setEmail(String email) {   
  31.         this.email = email;   
  32.     }   
  33.   
  34.     public String getAddress() {   
  35.         return address;   
  36.     }   
  37.   
  38.     public void setAddress(String address) {   
  39.         this.address = address;   
  40.     }   
  41. }  

 

OK,部署完毕后,输入http://localhost:8080/MyTest/UserListingAction.action来测试一下。
当列表中的userid被点中后,javaScript通知Div标签从URL中动态加载返回内容。这个例子中,UserDetailAction取得用户信息并传递给userdetail.jsp。userdetail.jsp生成最终的展示结果,显示在Div中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值