在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按钮,运行如下: