一个form多个submit的处理

本文介绍如何在Struts2框架中处理含有多个提交按钮的HTML表单,通过使用特定的方法名称映射来区分不同的按钮操作,并展示了从页面设计到Action处理的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在很多 Web 应用中,为了完成不同的工作,一个 HTML form 标签中可能有两个

或多个 submit 按钮,如下面的代码所示:
< html action =" " method ="post" >
< input type ="submit" value ="保存" />
< input type ="submit" value ="打印" />
</ html >

由于在 <form>中的多个提交按钮都向一个 action提交,使用 Struts2 Action

的 execute方法就无法判断用户点击了哪一个提交按钮。
在 Struts2中提供了另外一种方法,使得无需要配置可以在同一个 action类中

执行不同的方法(默认执行的是 execute方法)。使用这种方式也需要通过请求

参来来指定要执行的动作。请求参数名的格式为:
action!method.action
注:由于 Struts2只需要参数名,因此,参数值是什么都可以。

下面给出一个实例程序来演示如何处理有多个 submit的 form:
【第 1步】实现主页面 (more_submit.jsp)
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>一个form多个submit的处理</title>
</head>
<body>
<s:form action="submit" method="post">
<s:textfield name="msg" label="输入内容" />
<s:submit name="save" value="保存" align ="left" method="save" />
<s:submit name="print" value="打印" align ="left" method="print" />
</s:form>
</body>
</html>
在 more_submit.jsp中有两个 submit:保存和打印。其中分别通过 method属性

指定了要调用的方法: save和 print。因此,在 Action类中必须要有 save和

print方法。

【第 2步】实现 Action类( MoreSubmitAction)
public class MoreSubmitAction extends ActionSupport implements

ServletRequestAware {

private String msg;
private String result;
private HttpServletRequest request;

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

public String getResult() {
return result;
}

public void setResult(String result) {
this.result = result;
}

public void setServletRequest(HttpServletRequest request) {
this.request = request;
}

public String save() {
result = "成功保存" + msg;
request.setAttribute("req_result", "成功保存[" + msg + "]");
return "save";
}

public String print() {
result = "成功打印" + msg;
request.setAttribute("req_result", "成功打印[" + msg + "]");
return "print";
}
}
上面的代码需要注意如下两点:
save和 print方法必须存在,否则会抛出 java.lang.NoSuchMethodException异

常。

Struts2 Action动作的 execute方法无法访问 request对象,因此, Struts2

Action类需要实现一个 Struts2自带的拦截器来获得 request对象,拦截器如下


org.apache.struts2.interceptor. ServletRequestAware

【第 3步】配置 Struts2 Action
struts.xml 的代码如下:

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" >
< struts >
< package name ="demo" extends ="struts-default" >
<action name="submit" class="test.MoreSubmitAction">
<result name="save">/test/result.jsp</result>
<result name="print">/test/result.jsp</result>
</action>
</ package >
</ struts >

【第 4步】编写结果页( result.jsp)
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>一个form多个submit的处理</title>
</head>
<body>
<s:property value="result"/>
<br>
<h3>${request.req_result}</h3>
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值