Struts2中DispatherAction的功能

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值