Struts 之 DispatchAction

介绍

DispatchAction就是在struts-config中用parameter参数配置一个表单字段名,这个字段的值就是最终替代execute被调用的方法。

例如parameter="method"而request.getParameter("method")="save",其中"save"就是MethodName。struts的请求将根据parameter被分发到"save"或者"edit"或者什么。但是有一点,save()或者edit()等方法的声明和execute必须一模一样。

新建工程:test

添加Struts框架

创建index.jsp

按下Ctrl + N ,创建add.jspUsersAction.java

ActionForm采用动态的ActionForm,所以继承于DynaActionForm

UserAction的内容将包含add、delall等方法,并且继承于DispatchAction

* 记得修改AddAction.java 为 UsersAction

<action

attribute="addForm"

input="/add.jsp"

name="addForm"

parameter="method"

path="/add"

scope="request"

validate="false"

type="com.test.struts.action.UsersAction" />

* 绿色字全部份为参数

新建一个forward,名称为indexGo,并指向index.jsp,Relative设置为true

修改add.jsp文件

<html:form action="/add">

username : <html:text property="username"/><html:errors property="username"/><br/>

<html:submit onclick="document.forms[0].action='add.do?method=add';document.forms[0].submit();"/><html:cancel/>

</html:form>

* 绿色字为修改部份

修改后的提交方式是带参数提交的,不过必须点提交按钮,如果是使用回车键的话就不会带有参数

修改UsersAction.java文件

增加以下代码:

public ActionForward add(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) {

DynaActionForm addForm = (DynaActionForm) form;

String username = addForm.getString("username");

// 验证用户输入

if (username == null || username.length() < 1)

mapping.getInputForward();

HttpSession session = request.getSession();

// 从session中获得数据

Vector users = (Vector) session.getAttribute("Users");

if (users == null)

users = new Vector();

users.addElement(username);

session.setAttribute("Users", users);

return mapping.findForward("indexGo");

}

修改index.jsp文件,使页面中可以显示session中的数据,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%>

<html>

<head>

<title>INDEX</title>

</head>

<body>

<a href="add.jsp">ADD USER</a><br>

<a href="delete.jsp">DELETE ALL</a><p>

<logic:present name="Users">

<logic:iterate id="element" name="Users">

<bean:write name="element"/><br>

</logic:iterate>

</logic:present>

</body>

</html>

按下Ctrl + N ,创建DellallAction.java,继承于DispatchAction

选中:Use existing Action class,浏览UsersAction

选中:Parameter选项卡,填入method,然后完成

现在修改index.jsp文件

<a href="delete.jsp">DELETE ALL</a><p>

改为

<a href="delall.do?method=delall">DELETE ALL</a><p>

修改UsersAction.java文件

增加以下代码:

public ActionForward delall(

ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response) {

HttpSession session=request.getSession();

session.setAttribute("Users",null);

return mapping.findForward("indexGo");

}

这一步很重要,execute 方法必须删除!!!

好了,可以进行测试了!!!

你可能感兴趣的:(apache,html,bean,jsp,struts)