Struts旅程(五)struts控制器DispatchAction(二)

2014-11-24 02:50:13 · 作者: · 浏览: 1
anUtils.copyProperties(user,uaf); user.setCreateDate(newDate()); //调用业务逻辑操作 UserManager.getInstance().addUser(user); returnmapping.findForward("add_success"); } /** * 修改用户 * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward modify(ActionMapping mapping, ActionForm form, HttpServletRequestrequest, HttpServletResponse response) throwsException { //获取从页面表单中提交过来的值 UserActionForm uaf = (UserActionForm)form; User user = new User(); BeanUtils.copyProperties(user,uaf); //调用业务逻辑操作 UserManager.getInstance().modifyUser(user); returnmapping.findForward("modify_success"); } /** * 根据ID查询用户 * * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward find(ActionMapping mapping, ActionForm form, HttpServletRequestrequest, HttpServletResponse response) throwsException { //获取从页面表单中提交过来的值 UserActionForm uaf = (UserActionForm)form; String userId = uaf.getUserId(); //调用业务逻辑操作 User user = UserManager.getInstance().findUserById(userId); //将user对象从Action传递到JSP页面 request.setAttribute("user",user); returnmapping.findForward("find_success"); } }

Struts-config.xml配置文件代码如下所示。

  
   
    
    
     
   
   
    
    
     
     
      jsp"/> 
       
       
       
       
     
    
     

  


其中配置Action的时候,配置了parameter属性,并且指定了parameter属性值为command,当用户单击添加或删除用户操作时,会以http://localhost:8080/struts_dispatchaction_usermgr/http://blog.csdn.net/lovesummerforever/article/details/user/user_maint.do command=list,这个请求会被映射到UserAction控制器中,Struts根据method参数的值把这个请求发送到控制器UserAction的list方法。这样取得参数完成页面的调用。

从上述可以看出,DispatchAction可以通过command这个参数的值来决定调用DispatchAction的哪个方法,DispatchAction是从用户请求的URL中提取parameter定义参数的值,从而决定调用哪个方法处理用户请求。所以DispatchAction不能通过ActionForm向服务器提交请求,因为提交表单的时候不能向服务器传递参数。

根据上述示例我们可以总结出DispatchAction与Action区别:Action是从表单中取得数据,并且自动转换为对应的类型。而DispatchAction取得配置文件中parameter,截取parameter定义的参数值。但是DispatchAction可以处理多个动作而不需要建立多个Action。

DispatchAction可以在同一个控制器中处理多个动作,但只能通过URL来调用控制器,根据用户提交的参数来决定调用哪个方法来处理用户请求。不能通过表单提交用户请求信息,在struts中如果要在同一个表单中处理不同的动作,可以使用LookupDispatchAction。在这里就不详细讲述了,有兴许的童鞋可以查找些资料来实现。

下一篇struts页面转发控制ActionForward和ActionMapping。