Struts
:
DispatchAction
的使用
今天在看一个
Struts
代码时,发现
Action
类继承的父类为
DispatchAction
,于是找了找资料研究了下
DispatchAction
类,现总结如下:
DispatchAction
是
Struts1.1
中的一个类,它的父类是
Action
,它的作用就在于将多个功能相似的业务逻辑放在同一个
Action
中实现,各个业务逻辑通过传入不同的参数来决定执行哪个操作方法
通常在
Action
中我们都是通过
execute
方法来处理业务逻辑及页面转向,一个
Action
只能完成一种业务逻辑处理
,
当然我们也可以在页面插入一个隐藏的变量,然后在
Action
的
execute
方法中通过判断这个隐藏变量的值来决定调用哪个方法,也可以达到同一个
Action
来处理多种业务逻辑,可是这样的话想一想肯定会造成页面代码的增加及影响页面代码的可读性
.
看一看
DispatchAction
是如何实现的
比如对一个用户对象来说,存在增加,删除,修改的操作,首先创建一个继承
DispatchAction
的
UserAction
类,
然后将
addUser,delUser,updateUser
这些方法写在这个类里面,代码如下:
package
com.why.struts.action;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
org.apache.struts.action.ActionForm;
import
org.apache.struts.action.ActionForward;
import
org.apache.struts.action.ActionMapping;
import
org.apache.struts.actions.DispatchAction;
import
com.why.Constant;
import
com.why.struts.form.AddUserForm;
import
com.why.struts.form.LoginForm;
public
class
UserAction
extends
DispatchAction
{
public
ActionForward addUser (ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response) throws Exception
{
//
增加用户业务的逻辑
return
mapping.findForward(Constant.
FORWARD_ADD
);
}
public
ActionForward delUser(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response) throws Exception
{
//
删除用户业务的逻辑
return
mapping.findForward(Constant.
FORWARD_SUCCESS
);
}
public
ActionForward updateUser(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response) throws Exception
{
//
更新用户业务的逻辑
return
mapping.findForward(Constant.
FORWARD_SUCCESS
);
}
}
如何实现这些不同方法的调用呢
?
那就是要在
struts-config.xml
文件中更改
action-mapping
的配置,如下:
<
action-mappings
>
<
action
attribute
=
"addUserForm"
input
=
"/addUser.jsp"
name
=
"addUserForm"
parameter="method"
path
=
"/addUser"
scope
=
"request"
type="com.why.struts.action.UserAction" >
</
action
>
<
action
attribute
=
"delUserForm"
input
=
"/delUser.jsp"
name
=
"delUserForm"
parameter="method"
path
=
"/delUser"
scope
=
"request"
type="com.why.struts.action.UserAction" />
<
action
attribute
=
"updateUserForm"
input
=
"/updateUser.jsp"
name
=
"updateUserForm"
parameter="method"
path
=
"/updateUser"
scope
=
"request"
type="com.why.struts.action.UserAction" />
</
action-mappings
>
可以看到每个
<action />
中都增加了
parameter=" "
项,这个值可以随便命名,如上面命名为
metho
d
,用来接收页面传来的参数
如下为页面的提交, 注意:对应
<action />
中的
parameter
值
,
对应
UserAction
类中的方法名
AddUser.jsp
<html:link href="addUser.do?method=addUser">Add User</html:link>
DelUser.jsp
<html:link href="delUser.do?method=delUser">Add User</html:link>
UpdateUser.jsp
<html:link href="updateUser.do?method=updateUser">Add User</html:link>