注意:以下两个例子在调试的过程中用的是同一个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提交的路径要注意具体见以上代码