2012年12月26日

Struts2 学习 第5part 动态方法调用DMI

关于Action的方法调用有两种:但我也推荐用第二种(动态方法调用)

项目例子:Struts2_ActionMethod

先看看我们的struts.xml配置文件:

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd"> 
  5.  
  6. <struts> 
  7.     <package name="user" extends="struts-default" namespace="/user"> 
  8.         <action name="userAdd" class="com.wwj.struts2.user.action.UserAction" method="add"> 
  9.             <result name="add">/user_add_success.jsp</result> 
  10.         </action> 
  11.           
  12.         <action name="user" class="com.wwj.struts2.user.action.UserAction"> 
  13.             <result name="add">/user_add_success.jsp</result> 
  14.             <result name="delete">/user_delete_success.jsp</result> 
  15.         </action> 
  16.     </package> 
  17. </struts> 

以上配置文件就使用了两种方法:

第1种方法:.在action标签指定method="方法名"

第2种方法:直接指定一个action:user就行了,不指定method

但这么说是无法理解如何动态调用方法的,下面让小巫来解释一下工作原理

在浏览器中输入以下链接:http://localhost:8080/Struts2_ActionMethod/

会直接进入index.jsp文件,显示以下内容

Struts2 学习 第5part 动态方法调用DMI_Struts2

第一个“添加用户”使用的是第一种方法,点击它,会跳转到user_add_success.jsp页面

Struts2 学习 第5part 动态方法调用DMI_Struts2_02

第二个“添加用户”使用的是第二种方法,点击它,同样会跳转到user_add_success.jsp页面

Struts2 学习 第5part 动态方法调用DMI_Struts2_03

第三个连接“删除用户”使用的是第二中方法,单击它,会跳转到user_delete_success.jsp页面

Struts2 学习 第5part 动态方法调用DMI_Struts2_04

可以从url地址发现,第二种方法中,只需指定一个Action:user,就能够动态调用add、delete等方法,想一想,如果用第一种方法,则需要定义很多个Action,如需要调用delete方法,需要定义userDelete这个Action,工作量明显大了。现在可以发现,动态调用方法的好处了吧。

index.jsp文件:

  1. <?xml version="1.0" encoding="GB18030" ?>
  2. <%@ page language="java" contentType="text/html; charset=GB18030"
  3. pageEncoding="GB18030"%>
  4. <% String context = request.getContextPath(); %>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  6. <html xmlns="http://www.w3.org/1999/xhtml">
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
  9. <title>Insert title here</title>
  10. </head>
  11. <body>
  12. Action执行的时候并不一定要执行execute方法<br />
  13. 可以在配置文件中配置Action的时候用method=来指定执行哪个方法
  14. 也可以在url地址中动态指定(动态方法调用DMI)(推荐)<br />
  15. <a href="<%=context %>/user/userAdd">添加用户</a>
  16. <br />
  17. <a href="<%=context %>/user/user!add">添加用户</a>
  18. <br />
  19. <a href="<%=context %>/user/user!delete">删除用户</a>
  20. <br />
  21. 前者会产生太多的action,所以不推荐使用
  22. </body>
  23. </html>

再来看看Action实现类吧:

  1. package com.wwj.struts2.user.action;  
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.  
  5. public class UserAction extends ActionSupport {  
  6.     public String add() {  
  7.         return "add";  
  8.     }  
  9.     public String delete() {  
  10.         return "delete";  
  11.     }  

返回值分别为add ,delete

 

关于路径问题,小巫就总结到这里啦。继续学习下一part.