Struts 2:处理一个form多个submit

在很多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属性指定了要调用的方法:saveprint。因此,在Action类中必须要有saveprint方法。(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;
    }
}

上面的代码需要注意如下两点:

saveprint方法必须存在,否则会抛出java.lang.NoSuchMethodException异常。

只使用Struts2 Action动作的execute方法无法访问request对象,因此,Struts2 Action类需要实现一个Struts2自带的拦截器来获得request对象,拦截器如下:
org.apache.struts2.interceptor. ServletRequestAware

【第 3 步】配置 Struts2 Action
<?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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值