2012年12月26日
Struts2 学习 第5part 动态方法调用DMI
关于Action的方法调用有两种:但我也推荐用第二种(动态方法调用)
项目例子:Struts2_ActionMethod
先看看我们的struts.xml配置文件:
- <?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>
- <package name="user" extends="struts-default" namespace="/user">
- <action name="userAdd" class="com.wwj.struts2.user.action.UserAction" method="add">
- <result name="add">/user_add_success.jsp</result>
- </action>
- <action name="user" class="com.wwj.struts2.user.action.UserAction">
- <result name="add">/user_add_success.jsp</result>
- <result name="delete">/user_delete_success.jsp</result>
- </action>
- </package>
- </struts>
以上配置文件就使用了两种方法:
第1种方法:.在action标签指定method="方法名"
第2种方法:直接指定一个action:user就行了,不指定method
但这么说是无法理解如何动态调用方法的,下面让小巫来解释一下工作原理
在浏览器中输入以下链接:http://localhost:8080/Struts2_ActionMethod/
会直接进入index.jsp文件,显示以下内容
第一个“添加用户”使用的是第一种方法,点击它,会跳转到user_add_success.jsp页面
第二个“添加用户”使用的是第二种方法,点击它,同样会跳转到user_add_success.jsp页面
第三个连接“删除用户”使用的是第二中方法,单击它,会跳转到user_delete_success.jsp页面
可以从url地址发现,第二种方法中,只需指定一个Action:user,就能够动态调用add、delete等方法,想一想,如果用第一种方法,则需要定义很多个Action,如需要调用delete方法,需要定义userDelete这个Action,工作量明显大了。现在可以发现,动态调用方法的好处了吧。
index.jsp文件:
- <?xml version="1.0" encoding="GB18030" ?>
- <%@ page language="java" contentType="text/html; charset=GB18030"
- pageEncoding="GB18030"%>
- <% String context = request.getContextPath(); %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
- <title>Insert title here</title>
- </head>
- <body>
- Action执行的时候并不一定要执行execute方法<br />
- 可以在配置文件中配置Action的时候用method=来指定执行哪个方法
- 也可以在url地址中动态指定(动态方法调用DMI)(推荐)<br />
- <a href="<%=context %>/user/userAdd">添加用户</a>
- <br />
- <a href="<%=context %>/user/user!add">添加用户</a>
- <br />
- <a href="<%=context %>/user/user!delete">删除用户</a>
- <br />
- 前者会产生太多的action,所以不推荐使用
- </body>
- </html>
再来看看Action实现类吧:
- package com.wwj.struts2.user.action;
- import com.opensymphony.xwork2.ActionSupport;
- public class UserAction extends ActionSupport {
- public String add() {
- return "add";
- }
- public String delete() {
- return "delete";
- }
- }
返回值分别为add ,delete
关于路径问题,小巫就总结到这里啦。继续学习下一part.