一个form多个submit的处理

来源:互联网 发布:网络信息安全博览会 编辑:程序博客网 时间:2024/05/16 07:04

在很多 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>

 

原创粉丝点击