在很多Web应用中,为了完成不同的工作,一个HTML form标签中可能有两个或多个submit按钮:
【第1步】实现主页面(index.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<form action="index.action">
<s:textfield name="name" label="输入内容"/>
<s:submit value="保存" method="save" align="left"/>
<%out.println("<br>"); %>
<s:submit value="打印" method="print" align="left"/>
</form>
</body>
</html>
注:
在index.jsp中有两个submit:保存和打印。其中分别通过method属性指定了要调用的方法:save和print。因此,在Action类中必须要有save和print方法。(out.println("<br>") 用来换行)(S标签)
【第2步】实现Action类(SubmitAction)
package action;
import javax.servlet.http.HttpServletRequest;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;
public class SubmitAction extends ActionSupport implements ServletRequestAware
{
private String name;
private javax.servlet.http.HttpServletRequest request;
//获得HttpServletRequest对象
public void setServletRequest(HttpServletRequest request)
{
this.request = request;
}
//处理save submit按钮的动作
public String save() throws Exception
{
request.setAttribute("result", "成功保存[" + name + "]");
return "save";
}
//处理print submit按钮的动作
public String print() throws Exception
{
request.setAttribute("result", "成功打印[" + name + "]");
return "print";
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.msg = name;
}
}
上面的代码需要注意如下两点:
save和print方法必须存在,否则会抛出java.lang.NoSuchMethodException异常。
只使用Struts2 Action动作的execute方法无法访问request对象,因此,Struts2 Action类需要实现一个Struts2自带的拦截器来获得request对象,拦截器如下:
org.apache.struts2.interceptor. ServletRequestAware
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="struts2" extends="struts-default">
<action name="index" class="com.lrj.struts2.Submit">
<result name="save">/result.jsp</result>
<result name="print">/result.jsp</result>
</action>
</package>
</struts>
【第
4
步】编写结果页(
result.jsp
)
<%@ page pageEncoding="UTF-8"%>
<html>
<head>
<title>提交结果</title>
</head>
<body>
<h1>${result}</h1>
</body>
</html>
在
result.jsp
中将在
save
和
print
方法中写到
request
属性中的执行结果信息取出来,并输出到客户端。
启动Tomcat后,在IE中执行如下的URL来测试程序:
http://localhost:8080/moresubmit/index.jsp
大家也可以直接使用如下的URL来调用save和print方法:
调用save方法:http://localhost:8080/demosubmit/index!save.action
调用print方法:http://localhost:8080/demosubmit/index!print.action