DispatchAction避免每个Action创建一个类。
如果只使用一个UserAction来实现User的增删改查,那么UserAction继承DispatchAction,UserAction中的方法参数与excute的参数相同,该Action不复写execute方法。
/**
* 用户CRUD
* @author Administrator
*
*/
public class UserAction extends DispatchAction {
@Override
protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println("-----------UserAction.unspecified()-----------");
//调用业务逻辑操作
List userList = UserManager.getInstance().findAllUserList();
request.setAttribute("userlist", userList);
return mapping.findForward("list_success");
// ActionForward af = new ActionForward();
// af.setPath("/user/usermaint.do?command=list");
// af.setRedirect(true);
// return af;
}
/**
* 用户添加
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//获取从页面表单中提交过来的值
UserActionForm uaf = (UserActionForm)form;
User user = new User();
BeanUtils.copyProperties(user, uaf);
user.setCreateDate(new Date());
//调用业务逻辑操作
UserManager.getInstance().addUser(user);
return mapping.findForward("success");
}
/**
* 用户删除
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward del(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//获取从页面表单中提交过来的值
UserActionForm uaf = (UserActionForm)form;
//取得需要删除的userId的集合
String[] userIdList = uaf.getSelectFlag();
//调用业务逻辑操作
UserManager.getInstance().deleteUsers(userIdList);
return mapping.findForward("success");
}
/**
* 根据ID查询用户
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward find(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//获取从页面表单中提交过来的值
UserActionForm uaf = (UserActionForm)form;
String userId = uaf.getUserId();
//调用业务逻辑操作
User user = UserManager.getInstance().findUserById(userId);
//将user对象从Action传递到JSP页面
request.setAttribute("user", user);
return mapping.findForward("find_success");
}
// /**
// * 查询所有用户
// * @param mapping
// * @param form
// * @param request
// * @param response
// * @return
// * @throws Exception
// */
// public ActionForward list(ActionMapping mapping, ActionForm form,
// HttpServletRequest request, HttpServletResponse response)
// throws Exception {
// //调用业务逻辑操作
// List userList = UserManager.getInstance().findAllUserList();
// request.setAttribute("userlist", userList);
//
// return mapping.findForward("list_success");
// }
/**
* 修改用户
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward modify(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//获取从页面表单中提交过来的值
UserActionForm uaf = (UserActionForm)form;
User user = new User();
BeanUtils.copyProperties(user, uaf);
user.setCreateDate(new Date());
//调用业务逻辑操作
UserManager.getInstance().modifyUser(user);
return mapping.findForward("success");
}
}
配置Action
<action path="/user/usermaint"
type="com.bjsxt.drp.web.usermgr.actions.UserAction"
name="userForm"
scope="request"
parameter="command"
>
<!--
<forward name="add_success" path="/user/usermaint.do?command=list" redirect="true"/>
<forward name="del_success" path="/user/usermaint.do?command=list" redirect="true"/>
<forward name="modify_success" path="/user/usermaint.do?command=list" redirect="true"/>
-->
<forward name="find_success" path="/user/user_modify.jsp"/>
<forward name="list_success" path="/user/user_list.jsp"/>
</action>
action配置中的parameter表示的是url后传递的参数,在Action代码中会根据传递的参数查找对应的方法。
jsp中的代码:
<a href="user/usermaint.do?command=list" title="请点击访问用户管理系统">用户管理系统</a>
然后就会调用action中的list方法。
DispathAction的执行流程:
在该UserAction中没有execute方法,所以就执行DispatchAction方法,在该方法中查找command,然后得到command的参数,参数不能只execute或perform,此参数应该是Action中的方法名,然后调用Action中的方法。
在项目中一般都是一个Action和一个ActionForm。
1,如果复写execute方法,那么就要调用super里的execute方法
2,parameter的参数不能是execute或者perform
3,<action>中的parameter参数是值请求的url后的参数,如果没有参数程序会执行DispatchAction中的未指定方法unspecified(),同时也可以在Action中复写该方法,在复写的该方法中执行一个转向,或者其他操作。