`

DispatchAction的使用

阅读更多
DispatchAction的使用:
* DispatchAction中的execute方法,如果覆盖必须显示调用super.execute()
* parameter参数值不能是execute和perform
* <action>标签中的parameter的含义
:parameter="method"
* 了解DispatchAction中的unspecified方法的含义
:在没有指定方法名的时候采用
public class LoginAction extends DispatchAction {
    public ActionForward loginValidate(ActionMapping mapping, ActionForm form,
                                       HttpServletRequest request,
                                       HttpServletResponse response) {
        LoginForm loginForm = (LoginForm) form;
        ActionForward forward = new ActionForward();
        ...
        return forward;
    }
    public ActionForward deleteUser(ActionMapping mapping, ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response) {
        LoginForm loginForm = (LoginForm) form;
        ActionForward forward = new ActionForward();
        ...
        return forward;
    }
}


一个验证信息正确性loginValidate,一个删除一个记录deleteUser方法,
用method=方法名来指定要调用的方法。
新建一个jsp页面login.jsp,注意:form表单的action的值:::
<html:form action="/loginAction.do?method=loginValidate" method="POST">      用户名:
      <html:text property="au_lname"/>
      <br>
      <html:submit property="submit" value="Submit"/>
      <br>
      <html:reset value="Reset"/>
    </html:form>
验证信息。

再建一个jsp页面delete.jsp,主要内容如下:::
<html:form action="/loginAction.do?method=deleteUser" method="POST">      用户名:
      <html:text property="au_lname"/>
      <br>
      <html:submit property="submit" value="Submit"/>
      <br>
      <html:reset value="Reset"/>
    </html:form>


根据用户名删除。
在struts-config.xml配置一个parameter="method"属性键值对:
<action-mappings>
    <action name="loginForm" parameter="method" path="/loginAction" scope="request" type="com.aptech.dispatchactiondemo.action.LoginAction">
      <forward name="error" path="/error.jsp" />
      <forward name="success" path="/success.jsp" />
      <forward name="deletesuccess" path="/deletesuccess.jsp" />
    </action>
</action-mappings>

第二种
这一种的struts-config.xml与第一种的相同,也要有parameter=""属性。
分析以下第一种方式:Action中有两个方法,对应两个jsp页面、具体为对应两个表单、两个action="/loginAction.do"路径,
而第二种方法是只有一个jsp页面、即一个表单,具体如下:

...
<h1>下面表单中的“添加”和“修改”按钮都可以提交表单,但不是JSF</h1>
<p>
    <html:form action="/demoAction.do" method="POST">
      <%--提交的路径还是*.do --%>
      userName:
      <html:text property="userName"/>
      <br>
      password:
      <html:password property="password"/>
      <br>
      <input type="hidden" name="method" value="add"/>
      <%--

        添加了一个hidden隐藏文本域,name的值method与

        struts-config.xml里面的parameter的值method相同

      --%>
      <input type="submit" onclick="method.value='add'" value="添加"/>
      <input type="submit" onclick="method.value='modify'" value="修改"/>
      <%--两个sumbit按钮,在onclick方法上更改method的值--%>
    </html:form>
...


上面的表单有两个提交按钮,特别的是有一个hidden隐藏域的作用。
再就是验证的问题:
一般流程是如果表单数据未通过ActionForm的验证,则会返回struts-config.xml中该Action对应的input指定的路径。
但在继承的DispatchAction类中,多个Action指向同一个配置文件,举个小例:
现有两个页面(用户注册页面、用户资料修改页面)指向同一Action(继承自DispatchAction)和ActionForm(验证信息基本相同),当ActionForm验证失败时,分别需要返回到注册页面和修改页面,但struts-config.xml中的input只能设置一个值,这时怎么办?

虽然你的XXXDispatchAction的class实例只有一个,例如com.xyh.emp.EmployeeAction, 但是在struts-config.xml的ActionMappings里面可以映射为多个 <action> 标记,例如:

<action 
path= "/registerEmployee " 
input= "/registerEmployee.jsp " 

parameter= "method " 
name= "employeeForm " 
attribute= "employeeForm " 
scope= "request " 
validate= "true " 
type= "com.xyh.emp.EmployeeDispatchAction "> 

<forward name= "detail " path= "/detailEmployeeInfo.jsp " /> 
</action> 

<action 
path= "/editEmployee " 
input= "/editEmployee.jsp " 

parameter= "method " 
name= "employeeForm " 
attribute= "employeeForm " 
scope= "request " 
validate= "true " 
type= "com.xyh.emp.EmployeeDispatchAction "> 

<forward name= "detail " path= "/detailEmployeeInfo.jsp " /> 
</action> 


那么在JSP里面就可以这么分别描述表单标签。
• <html:form action= "registerEmployee.do "/>
• <html:form action= "editEmployee.do "/>

这样你不仅能为不同的行为指定不同的“action”, 自然就可以使用不同的input页, 分别指定validate是true或者false, 甚至可以使用不同的ActionForm。

说白了就是DispatchAction的类实例只有一个, 但是可以通过不同的path映射为不同的“行为”, 这不是Struts的缺点,反而正好是它的优点。
Validator框架对ActionFrom进行验证的时候有两种识别FormBean的方式, 一种是使用BeanName,就是action标签里面的name= "employeeForm ", 另一种是使用path,就是action标签里面的path= "/regEmployee ", 那么在使用了DispatchAction的情况下,如果使用Validator进行验证的话, 你的XXXXForm只需要继承ValidatorActionForm或DynaValidatorActionForm, 然后在validation.xml文件里面form标签里面的name属性使用该映射action的path就可以了。

分享到:
评论

相关推荐

    struts中dispatchAction用法

    以下是一个简单的DispatchAction使用步骤: 1. **创建DispatchAction类**:首先,你需要继承自org.apache.struts.actions.DispatchAction,创建一个新的Action类。在这个类中,你需要定义一系列处理特定业务的方法...

    解决Struts1.x中使用Validator框架对DispatchAction不同方法使用不同的字段验证的示例

    解决Struts1.x中使用Validator框架对DispatchAction不同方法使用不同的字段验证 你可以先参看我的blog文章:http://blog.csdn.net/qjyong/archive/2008/11/16/3311688.aspx 再决定是否下载。

    DispatchAction

    在Struts框架中,`DispatchAction`和`MappingDispatchAction`是两种常见的控制器组件,用于处理用户请求。它们是Action接口的实现类,主要用于映射HTTP请求到特定的方法,从而实现业务逻辑的分发。 首先,让我们...

    DispatchAction实例

    下面我们将详细探讨`DispatchAction`的使用步骤和关键点: 1. **创建子类**:首先,你需要创建一个继承自` DispatchAction `的Java类。在这个类中,你可以定义自己的业务逻辑方法,比如`executeSave()`、`...

    java面试过程中遇到的问题总结

    DispatchAction 的 parameter 属性是给 DispatchAction 使用的,你的类要继承 DispatchAction 类,而不是普通的 Action,Action 只会执行 execute 方法,DispatchAction 会根据 parameter 的值执行特定的方法。...

    struts DispatchAction

    使用DispatchAction的另一个优点是,它可以结合Struts的国际化和主题功能,为不同的用户群体提供定制的视图。此外,通过将Action类中的方法组织成逻辑相关的组,可以更方便地进行权限控制和事务管理。 然而,需要...

    Struts中等同于DispatchAction类方法

    总结来说,"Struts中等同于DispatchAction类方法"是一种在不直接使用`DispatchAction`基类的情况下,通过前端传递方法名并在后端使用反射调用相应方法的技术,以实现多请求映射到单个Action类的多个方法。...

    DispatchAction、LookupDispatchAction、SwitchAction的应用

    **1.1 为什么要使用 DispatchAction** 在传统的 Struts 应用中,每一个业务逻辑操作往往都需要创建一个单独的 Action 类。例如,在一个文章管理系统中,可能需要为文章的添加、查看和搜索等功能分别编写 `...

    struts实现文件上传

    以下是对文件上传和DispatchAction使用的一些详细说明: 1. **文件上传流程**: - **表单提交方式**:文件上传必须使用HTTP的POST方法,因为GET方法无法处理大容量的数据,而文件通常较大。 - **表单编码**:`...

    Struts(DispatchAction) + 存储过程 => 实现分页效果

    5. **在JSP页面上展示**:最后,在JSP页面(如paging.jsp)上,你可以使用JSTL或其他标签库来遍历分页数据,并提供导航链接,让用户可以跳转到其他页码。 总结,通过结合Struts的DispatchAction和存储过程,我们...

    struts+oracle实现DispatchAction类

    在本项目中,我们关注的是"Struts+Oracle实现DispatchAction类",这是一个将Struts框架与Oracle数据库结合使用,以实现业务逻辑处理的例子。 DispatchAction是Struts框架中的一个关键组件,它扮演着控制器的角色,...

    Struts_DispatchAction的使用

    最近自学java中的框架-struts写了一些小例子,这都是很经典的程序,如果大家瞧得起要下载去看看,顺便给俺找找不足的地方。我的qq 821865130 email qingtian_hechen@163.com 希望大家能多多给我帮助...在此谢谢各位!!

    Struts 之 DispatchAction

    在本篇文章中,我们将深入探讨`DispatchAction`的工作原理、优点以及如何在实际项目中使用。 `DispatchAction`是Struts提供的一个扩展自`Action`类的预定义动作,它的主要目的是通过不同的方法来处理来自客户端的...

    Struts2常用标签&DispatchAction.rar

    03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar

    Struts1中怎样实现DispatchAction配置多个input属性\Struts1中怎样实现DispatchAction配置多个input属性

    Struts1中怎样实现DispatchAction配置多个input属性\Struts1中怎样实现DispatchAction配置多个input属性

    利用struts标签,dispatchAction,实现增删改查

    2. **DispatchAction的使用**: - **配置Action**:在struts-config.xml中,我们需要定义DispatchAction,指定其对应的类以及各个请求参数与方法的映射关系。例如: ```xml &lt;param name="operation"&gt;add `...

    SSH整合继承DispatchAction的简单例子

    这个"SSH整合继承DispatchAction的简单例子"是一个演示如何将这三个框架集成在一起,并利用Struts的DispatchAction来实现多请求分发的功能。 首先,让我们深入理解SSH框架的核心功能。Spring是一个强大的依赖注入...

    深入解析Java的Struts框架中的控制器DispatchAction

    本文将深入解析Struts中的控制器组件,特别是DispatchAction的使用。 在Struts框架中,控制器主要由ActionServlet和Action类组成。ActionServlet作为前端控制器,负责拦截所有HTTP请求,并根据配置文件(struts-...

    速动画教程系列第13集

    6. **与现代框架对比**:虽然DispatchAction在早期的Struts应用中广泛使用,但在Spring MVC和Play Framework等现代Java Web框架中,这种模式已被更简洁、可扩展的方式所取代,如使用注解驱动的方法映射。 7. **学习...

    struts1.2实现计算器示例

    Struts1.2是一个经典的Java Web框架,它在企业级应用开发中被广泛使用,尤其在Web MVC(Model-View-Controller)设计模式的应用上。本示例是基于Struts1.2实现的一个计算器程序,旨在帮助初学者理解Struts框架的工作...

Global site tag (gtag.js) - Google Analytics