DispatchAction

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中复写该方法,在复写的该方法中执行一个转向,或者其他操作。

原文地址:https://www.cnblogs.com/jinzhengquan/p/1955178.html