Struts1.2.9后的EventDispatchAction:简化处理多submit按钮

需积分: 9 3 下载量 122 浏览量 更新于2024-12-01 收藏 34KB DOC 举报
"本文将详细介绍如何使用Struts框架中的EventDispatchAction类来处理一个表单中的多个提交按钮。EventDispatchAction是DispatchAction的子类,它简化了在多个提交按钮场景下的处理方式,无需像LookupDispatchAction那样依赖属性文件和复杂的映射配置。" 在Struts框架中,当一个表单需要有多个提交按钮时,通常会遇到处理不同提交事件的挑战。EventDispatchAction 类自Struts 1.2.9版本引入,为了解决这个问题提供了更为便捷的解决方案。相比于LookupDispatchAction,EventDispatchAction 的使用更加直观和简单。 使用EventDispatchAction的步骤 1. 创建Action子类 首先,你需要创建一个继承自EventDispatchAction的子类。例如,在`<samples工程目录>\src\action`目录下创建名为`MyEventDispatchAction.java`的文件。在这个例子中,我们看到代码中定义了一个名为`MyEventDispatchAction`的类,它扩展了`EventDispatchAction`。这样,我们就可以重写该类的方法来处理不同的提交事件。 ```java package action; import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForward; import org.apache.struts.actions.EventDispatchAction; public class MyEventDispatchAction extends EventDispatchAction { // ... } ``` 2. 实现处理方法 每个提交按钮对应的事件需要一个对应的方法来处理。例如,我们可以创建一个`print`方法来处理`print`动作。在`MyEventDispatchAction`类中,我们可以添加以下方法: ```java public ActionForward print(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { try { response.setCharacterEncoding("GBK"); PrintWriter out = response.getWriter(); out.println("这是处理print动作的代码..."); out.close(); } catch (Exception e) { // 错误处理 } return null; // 或返回一个ActionForward对象,指向下一个页面 } ``` 3. 配置struts-config.xml 在`struts-config.xml`配置文件中,我们需要为每个提交按钮创建一个`<action>`元素,并通过`parameter`属性指定每个动作。例如,对于上面的`print`动作,配置如下: ```xml <action path="/myEventDispatch" type="action.MyEventDispatchAction"> <forward name="success" path="/success.jsp"/> <!-- 添加以下代码以处理print动作 --> <parameter name="print" method="print"/> </action> ``` 在这个配置中,`/myEventDispatch`是表单提交的路径,`print`是`<html:submit>`标签的`property`属性值,与我们在Action类中定义的方法相对应。 HTML 表单中的使用 在JSP页面中,我们可以创建一个表单,并为每个提交按钮指定不同的`property`属性: ```jsp <form action="<%= request.getContextPath() %>/myEventDispatch.do" method="post"> <input type="submit" name="print" value="打印"/> <input type="submit" name="save" value="保存"/> </form> ``` 在这个例子中,`print`和`save`是两个不同的提交按钮,它们分别对应`print`和`save`的动作。 总结,EventDispatchAction 类通过在`struts-config.xml`中配置参数和在Action子类中定义相应的方法,使得处理具有多个提交按钮的表单变得简单直接。它避免了LookupDispatchAction所需的属性文件映射,提高了开发效率。通过以上步骤,开发者可以轻松地实现对不同提交事件的区分和处理。