当前位置:主页 >> JSP及框架 >> 正文
Struts2 处理一个form多个submit
阅读:1873 输入:2014-11-12 15:11:54

在很多Web应用中,为了完成不同的工作,一个HTML form标签中可能有两个或多个submit按钮,如下面的代码所示:

  1.  <html action="..."  method="post">  
  2.     ... ...  
  3.     <input type="submit" value="保存" />  
  4.     <input type="submit" value="打印" />  
  5. html>  

 

由于在中的多个提交按钮都向一个action提交,使用Struts2 Action的execute方法就无法判断用户点击了哪一个提交按钮。

请求参数名的格式为

action!method.action

 

【第1步】实现主页面(more_submit.jsp)


<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>My JSP 'hello.jsp' starting page</title>
</head>

<body>
    <s:form action="submit.action" >
        <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)

 

  1. package action;  
  2. import javax.servlet.http.*;  
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. import org.apache.struts2.interceptor.*;  
  5. public class MoreSubmitAction extends ActionSupport implements ServletRequestAware  
  6. {  
  7.         private String msg;  
  8.         private javax.servlet.http.HttpServletRequest request;  
  9.     // 获得HttpServletRequest对象  
  10.         public void setServletRequest(HttpServletRequest request)  
  11.         {  
  12.                 this.request = request;  
  13.         }  
  14.     // 处理save submit按钮的动作  
  15.         public String save() throws Exception  
  16.         {  
  17.                 request.setAttribute("result""成功保存[" + msg + "]");  
  18.                 return "save";  
  19.         }  
  20.         // 处理print submit按钮的动作  
  21.         public String print() throws Exception  
  22.         {  
  23.                 request.setAttribute("result""成功打印[" + msg + "]");  
  24.                 return "print";  
  25.         }  
  26.         public String getMsg()  
  27.         {  
  28.                 return msg;  
  29.         }  
  30.         public void setMsg(String msg)  
  31.         {  
  32.                 this.msg = msg;  
  33.         }  
  34. }  

【第3步】配置Struts2 Action,struts.xml如下:

 

 

  1. xml version="1.0" encoding="UTF-8" ?>  
  2.  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5. <struts>          
  6.         <package name="demo" extends="struts-default" >  
  7.                 <action name="submit"  class="action.MoreSubmitAction">  
  8.                         <result name="save" >  
  9.                                 /result.jsp  
  10.                         result>  
  11.                         <result name="print">  
  12.                                 /result.jsp  
  13.                         result>  
  14.                 action>          
  15.         package>          
  16. struts>  

【第4步】编写结果页(result.jsp)

 

 

  1. <%@ page pageEncoding="GBK"%>  
  2. <html>  
  3.   <head>  
  4.     <title>提交结果title>  
  5.   head>  
  6.   <body>  
  7.     <h1>${result}h1>  
  8.   body>  
  9. html>  

 

在result.jsp中将在save和print方法中写到request属性中的执行结果信息取出来,并输出到客户端。

启动Tomcat后,在IE中执行如下的URL来测试程序:

    http://localhost:8080/moresubmit/more_submit.jsp

大家也可以直接使用如下的URL来调用save和print方法:

调用save方法:http://localhost:8080/moresubmit/submit!save.action
调用print方法:http://localhost:8080/moresubmit/submit!print.action