实例讲解DispatchAction和LookupDispatchAction

注意:以下两个例子在调试的过程中用的是同一个form和struts-config.xml,在调试的过程中DispatchAction是不用资源文件ApplicationResources.properties的,而LookupDispatchAction是要用到ApplicationResources.properties

先来说说DispatchAction,网上的许多例子都是和超链接来做的,其实用DispatchAction用按钮也是可以实现的,来看例子吧!

UserManagement.jsp

<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
	<head>
		<title>DispatchAction Example - viralpatel.net</title>
	</head>
	<body>
		<h2>
			User Management (DispatchAction Example)
		</h2>
		<font color="black"><h3>
				用struts标签的方法
			</h3> </font>
		<html:form action="/user" method="post">
			<html:text property="userName" />
			<html:submit property="method" value="create" />
			<html:submit property="method" value="delete" />
		</html:form>
		<font color="black"><h3>
				不用struts标签的方法
			</h3> </font>
		<form action="/struts_action_test/user.do" method="post">
			<input type="text" name="userName"/>
			<input type="submit" name="method" value="create"/>
			<input type="submit" name="method" value="delete"/>
		</form>
		<font color="blue"><h3>
				${message }
			</h3> </font> 现有以下用户:
		<c:forEach var="numArray" items="${num}">
			<table>
				<tr>
					<td>
						<c:out value="${numArray}" />
					</td>
				</tr>
			</table>
		</c:forEach>
	</body>
</html>

 UserManagementAction

package com.zgxr.struts;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

public class UserManagementAction extends DispatchAction {
	// 用于存放添加的用户
	List list = new ArrayList();
	public ActionForward create(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		LoginActionForm loginActionForm = (LoginActionForm) form;
		// 将新添加的用户放入list
		list.add(loginActionForm.getUserName());
		request.setAttribute("message", "User created successfully" + ":"
				+ "当前用户数量为:" + list.size());
		
		request.setAttribute("num", list);
		return mapping.findForward("success");
	}

	public ActionForward delete(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		LoginActionForm loginActionForm = (LoginActionForm) form;
		//将提交上来的用户从List中删除
		list.remove(loginActionForm.getUserName());
		request.setAttribute("message", "User deleted successfully" + ":"
				+ "当前用户数量为:" + list.size());
		request.setAttribute("num", list);
		return mapping.findForward("success");
	}

}

LoginActionForm:

package com.zgxr.struts;

import org.apache.struts.action.ActionForm;

public class LoginActionForm extends ActionForm {
	// 定义两个变量,这两个值与页面上的html:text的property的值相对应
	private int numOne;
	private int numTwo;
	private String userName;

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public int getNumOne() {
		return numOne;
	}

	public void setNumOne(int numOne) {
		this.numOne = numOne;
	}

	public int getNumTwo() {
		return numTwo;
	}

	public void setNumTwo(int numTwo) {
		this.numTwo = numTwo;
	}

}

 

struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
	<form-beans>
		<form-bean name="loginActionForm"
			type="com.zgxr.struts.LoginActionForm">
		</form-bean>
	</form-beans>
	<action-mappings>
		<action path="/user" parameter="method" name="loginActionForm"
			type="com.zgxr.struts.UserManagementAction">
			<forward name="success" path="/UserManagement.jsp" />
			<forward name="failure" path="/UserManagement.jsp" />
		</action>

		<action path="/test" name="loginActionForm" scope="request"
			parameter="action" type="com.zgxr.struts.TestAction"
			input="/operation.jsp">
			<forward name="success" path="/operation.jsp" />
			<forward name="failure" path="/operation.jsp" />
		</action>
	</action-mappings>
	<message-resources parameter="ApplicationResources" />
</struts-config>

 

好了把以上这些拷下来试试吧,下面我们来看看LookupDispatchAction

operation.jsp

%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>LookupDispatchAction Example - viralpatel.net</title>
	</head>
	<body>
		<h2>
			User Management (LookupDispatch Action Example)
		</h2>
              用struts标签的方法
		<html:form action="/test" method="post">
			<html:text property="numOne"/>
			<html:text property="numTwo"/>
			<html:submit property="action">
				<bean:message  key="button.sum"/>
			</html:submit>
			<html:submit property="action">
				<bean:message key="button.minus"/>
			</html:submit>
			<html:submit property="action">
				<bean:message key="button.multiply"/>
			</html:submit>
			<html:submit property="action">
				<bean:message key="button.divide"/>
			</html:submit>
		</html:form>
               不用struts标签的方法
              <form name="loginActionForm" method="post" action="/struts_action_test/test.do>
			<input type="text" name="numOne"/>
			<input type="text" name="numTwo"/>
			<input type="submit" name="action" value="sum"/>
			<input type="submit" name="action" value="minus">
			<input type="submit" name="action" value="multiply"/>
			<input type="submit" name="action" value="divide"/>
		</form>
	</body>
</html>

 

 

TestAction:

package com.zgxr.struts;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.LookupDispatchAction;

public class TestAction extends LookupDispatchAction {

	@Override
	//用于关联按键和方法
	protected Map getKeyMethodMap() {
		Map map = new HashMap();
		//如果按钮标题的key为button.sum. 则提交该按钮时对应sum方法
		map.put("button.sum", "sum");
		//如果按钮标题的key为button.minus. 则提交该按钮时对应minus方法
		map.put("button.minus", "minus");
		//如果按钮标题的key为button.multiply. 则提交该按钮时对应multiply方法
		map.put("button.multiply", "multiply");
		//如果按钮标题的key为button.divide. 则提交该按钮时对应divide方法
		map.put("button.divide", "divide");
		return map;
	}

	public ActionForward sum(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//将form转变成提交时用到的loginActonForm
		LoginActionForm loginActionForm = (LoginActionForm) form;
		//计算加法
		int num = loginActionForm.getNumOne() + loginActionForm.getNumTwo();
		request.setAttribute("action", num);
		return mapping.findForward("success");
	}

	public ActionForward minus(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//将form转变成提交时用到的loginActonForm
		LoginActionForm loginActionForm = (LoginActionForm) form;
		//计算减法
		int num = loginActionForm.getNumOne() - loginActionForm.getNumTwo();
		request.setAttribute("action", num);
		return mapping.findForward("success");
	}

	public ActionForward multiply(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//将form转变成提交时用到的loginActonForm
		LoginActionForm loginActionForm = (LoginActionForm) form;
		//计算乘法
		int num = loginActionForm.getNumOne() * loginActionForm.getNumTwo();
		request.setAttribute("action", num);
		return mapping.findForward("success");
	}

	public ActionForward divide(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//将form转变成提交时用到的loginActonForm
		LoginActionForm loginActionForm = (LoginActionForm) form;
		//计算除法
		int num = loginActionForm.getNumOne() / loginActionForm.getNumTwo();
		request.setAttribute("action", num);
		return mapping.findForward("success");
	}
}

 

 

ApplicationResources.properties

button.sum=sum
button.minus=minus
button.multiply=multiply
button.divide=divide

好了就这么多了哦忘了web.xml了

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>
			org.apache.struts.action.ActionServlet
		</servlet-class>
		<init-param>
			<param-name>application</param-name>
			<param-value>ApplicationResources</param-value>
		</init-param>
		<init-param>
			<param-name>config</param-name>
			<param-value>/WEB-INF/struts-config.xml</param-value>
		</init-param>
		<init-param>
			<param-name>debug</param-name>
			<param-value>3</param-value>
		</init-param>
		<init-param>
			<param-name>detail</param-name>
			<param-value>3</param-value>
		</init-param>
		<load-on-startup>0</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>/UserManagement.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 

大家要注意了在不用struts标签的时候,form提交的路径要注意具体见以上代码

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值