重温经典struts1之DispatchAction完成一个Action中编写多个方法接收页面的增删改查请求

发布时间:2024年01月16日

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

之前我们学习的Action类中,编写一个方法,重写父类的execute方法,接收页面发来的请求,而且,一个action中只能写一个方法。
今天,我们学习,Action类中写多个方法,接收页面的发来的增删改查请求,具体做法就是我们今天的主要内容DispatchAction类。


DispatchAction类

同样继承Action类,通过页面请求的url参数key=value方式(属性名=方法名),调用Action中所对应的方法。
我们编写的Action只需继承DispatchAction类即可。
例如

页面请求的url是http://localhost:8080/user_maint.do?command=list
list:是Action类中的方法名
command:是必须在struts-config.xml中,action标签中配置的parameter属性值
command=list:是调用Action中list方法

需求

如下图所示,
写一套用户增删改查页面,用户列表页面中有三个按钮,
点击添加用户按钮,跳转到用户添加页面
点击修改用户按钮,跳转到用户修改页面
点击删除用户按钮,跳转到用户删除页面
通过http://localhost:8080/user_maint.do?command=list,跳转到用户列表页面
※这里我们主要演示同一个Action中完成所有页面跳转,页面的组件和service层的具体的实现,我们就不详细展开了。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

具体实现步骤

  1. struts-config.xml文件中定义Action
    基本的配置我们就不展开了,
    这里的重点是parameter属性值:command,
    和页面请求url的key值对应,就是下边url中的command
    http://localhost:8080/user_maint.do?command=list
    这样就可以调用Action类中定义的list方法

struts-config.xml代码如下:

     <action
         path="/user_maint"
         type="jp.iosoft.action.UserAction"
         name="userForm"
         scope="request"
         parameter="command"
         validate="false">
         <forward name="list" path="/userList.jsp"></forward>
         <forward name="addUser" path="/addUser.jsp"></forward>
         <forward name="success" path="/userList.jsp" redirect="true"></forward>
     </action>
  1. 编写UserAction类
    继承DispatchAction类,定义增删改查方法,来完成页面的跳转
    ?list:跳转到用户列表页面
    ?showAddUser:跳转到用户添加页面
    ?showModifyUser:跳转到用户修改页面
    ?showDeleteUser:跳转到用户删除页面

UserAction代码如下:

package jp.iosoft.action;

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 UserAction extends DispatchAction {

	public ActionForward list(ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) {

		return mapping.findForward("list");

	}

	public ActionForward showAddUser(ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) {

		return mapping.findForward("addUser");

	}

	public ActionForward showModifyUser(ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) {

		return mapping.findForward("modifyUser");

	}

	public ActionForward showDeleteUser(ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) {

		return mapping.findForward("deleteUser");

	}

}
  1. 编写增删改查页面
    按照下图路径配置
    在这里插入图片描述

用户列表页面代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%-- <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> --%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>

	<h1>用户列表</h1>
	<hr>
	<div style="float:left">
		<form action="/user_maint.do?command=showAddUser" method="post">
			<input type="submit" value="添加用户" >
		</form>
	</div>
	<div style="float:left">
		<form action="/user_maint.do?command=showModifyUser" method="post">
			<input type="submit" value="修改用户" >
		</form>
	</div>
	<div style="float:left">
		<form action="/user_maint.do?command=showDeleteUser" method="post">
			<input type="submit" value="删除用户" >
		</form>
	</div>

</body>
</html>

用户添加页面代码如下:


<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%-- <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> --%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
<script type="text/javascript">
function goBack() {
	window.self.location="user_maint.do?command=list";
}
</script>
</head>
<body>
	<h1>用户添加页面</h1>
	<hr>
	<a href="#" οnclick="goBack();">返回</a><br>
</body>
</html>

用户修改页面代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%-- <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> --%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
<script type="text/javascript">
function goBack() {
	window.self.location="user_maint.do?command=list";
}
</script>
</head>
<body>
	<h1>用户修改页面</h1>
	<hr>
	<a href="#" οnclick="goBack();">返回</a><br>
</body>
</html>

用户删除页面代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%-- <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> --%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
<script type="text/javascript">
function goBack() {
	window.self.location="user_maint.do?command=list";
}
</script>
</head>
<body>
	<h1>用户删除页面</h1>
	<hr>
	<a href="#" οnclick="goBack();">返回</a><br>
</body>
</html>

拓展

DispatchAction类中有一个unspecified方法,当页面请求url中没有指定调用方法名时,该方法被调用,通常,增删改查的查询方法写在此方法中。

上边的Action代码,可做以下修改
把list方法名改成unspecified,

UserAction修改后的代码如下:


public class UserAction extends DispatchAction {

	public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) {

		return mapping.findForward("list");

	}

}

方法调用时,使用下边的url,无需带command=list

http://localhost:8080/user_maint.do?

总结

到这里我们就完成了Action类中继承DispatchAction类,完成一个Action中编写多个方法接收页面的增删改查请求,运行效果在文章开头需求中的图可以看到,欢迎留言交流,下篇见。

文章来源:https://blog.csdn.net/dy051107/article/details/135587331
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。