Struts2中DispatherAction的功能

来源:互联网 发布:索尼手机录音软件 编辑:程序博客网 时间:2024/06/08 08:01

在Struts1中,DispatchAction帮助我们将将多个功能相似的业务逻辑放在同一个 Action 中实现,各个业务逻辑通过传入不同的参数来决定执行哪个操作方法

在Struts2中,也默认的提供这种方法,使用这个功能,我们需要创建结构和execute方法相似的不同的方法,仅仅这个方法的名字改变了。

在这个例子里UserAction包含了和User相关的功能,像addUser,updateUser,deleteUser。

代码如下:

package com.zcl.struts.dispatchaction;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private static final long serialVersionUID = 1L;private String message ;public String execute(){message = "Inside execute method" ;return SUCCESS ;}public String addUser(){message = "Inside add method" ;return SUCCESS ;}public String updateUser(){message = "Inside update method" ;return SUCCESS ;}public String deleteUser(){message = "Inside delete method" ;return SUCCESS ;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}

在Struts.xml中我们需要配置Action的映射指定那个方法将会被调用。

每一单独的Action映射对应一个Action类的方法。Struts.xml内容如下:

<struts><package name="default" extends="struts-default"><action name="User" class="com.zcl.struts.dispatchaction.UserAction"><result name="success">/success.jsp</result></action><action name="addUser" method="add" class="com.zcl.struts.dispatchaction.UserAction"><result name="success">/success.jsp</result></action><action name="updateUser" method="update" class="com.zcl.struts.dispatchaction.UserAction"><result name="success">/success.jsp</result></action><action name="deleteUser" method="delete" class="com.zcl.struts.dispatchaction.UserAction"><result name="success">/success.jsp</result></action></package></struts>  
我们使用相同的Action类在所有的Action映射中,当请求是的URL是User时execute方法将会被调用,其他的同理。
但是这个配置的确繁琐,现在我们使用动态方法调用,就不用使用这么麻烦的配置了,但是要注意命名规范,下面我们也可以将Struts,xml文件配置成这样
<package name="dispatcher" extends="struts-default"><action name="*User" class="com.zcl.struts.dispatcheraction.UserAction" method="{1}"><result name="success">/success.jsp</result></action></package>
后面的method方法就是匹配前面的*代表的内容。

为每个方法配置一个单独的Action映射能够避免使用Struts2中提供的动态方法的使用。

在index.jsp页面中我们创建四个按钮去调用UserAction类中不同的方法。

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>Dispatcher</title>  </head>  <body>  <s:form action="User">  <s:submit action="addUser" value="add"/>  <s:submit action="updateUser" value="update"/>  <s:submit action="deleteUser" value="delete"/>  <s:submit></s:submit>  </s:form>  </body></html>
通过表单调用UserAction中不同的方法来返回不同的结果

成功显示页面succses.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>Dispatcher</title>  </head>  <body> <h3>The success page</h3> <hr/> <h3>${message}</h3>  </body></html>
运行一下:



假如我们点击update按钮,运行如下: