DispatchAction 的出现就是为了解决Struts中Action过多的问题,有些时候我们的Action实现的功能相似,但是过多的Action不仅让代码变得臃肿,也会让编码的时候分心。
这个DispathAction继承自Action,它在struts-config.xml中比Action多了一个参数parameter参数,这个参数的设定是自定义的一个String类型,这个参数是用来我们在跳转的时候指定的关键字。
举个例子:
我们有一个用户类User,我们想如果没有DispathAction而使用Action的话,需要AddUserAction、ModifyUserAction、DeleteUserAction三个Action来管理这个用户,而使用DispathAction,我们可以在parameter里设置参数为“operation”,然后在UserAction里面写三个函数:addUser()、modifyUser()、deleteUser(),当我们想转到某个具体的函数时我们可以这样使用:
/ProjectName/UserAction.do?operation=addUser
就可以转向AddUser函数,这样不仅让代码更简洁,更重要的是,我们更好的提现的Action的OO特性,这对于开发的简化和理解都有很大帮助。
贴上配置的代码
在UserAction里面的代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans >
<form-bean name="userForm" type="com.sh.web.struts.form.UserForm" />
</form-beans>
<global-exceptions />
<!-- 这里指的是全局跳转,任何一个Action都可以挑战的页面,适合通用界面的配置 -->
<global-forwards />
<action-mappings >
<!-- parameter参数用于将来区分用户不同的请求 -->
<action
attribute="userForm"
input="/WEB-INF/Login.jsp"
name="userForm"
parameter="flag"
path="/loginAndLogout"
scope="request"
type="com.sh.web.struts.action.LoginAndLogoutAction"
validate="false"
cancellable="true">
<!-- 这里是普通跳转,只能由该Action跳,不能由其他的跳转 -->
<forward name="loginSuccess" path="/WEB-INF/loginSuccess.jsp" />
</action>
</action-mappings>
<message-resources parameter="com.sh.struts.ApplicationResources" />
</struts-config>
//用于添加用户
public ActionForward addUser(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserForm userForm = (UserForm) form;// TODO Auto-generated method stub
return null;
}
//用于删除用户
public ActionForward deleteUser(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserForm userForm = (UserForm) form;// TODO Auto-generated method stub
return null;
}
//用于修改用户
public ActionForward ModifyUser(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserForm userForm = (UserForm) form;// TODO Auto-generated method stub
return null;
}