Struts2 处理一个form多个submit

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

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

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

请求参数名的格式为

action!method.action

【第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. <!DOCTYPE struts PUBLIC
  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

时间: 2024-08-07 12:32:16

Struts2 处理一个form多个submit的相关文章

MVC中一个Form多个submit在controller中如何区分提交的是那个submit(如:登陆和注册)

1. 用Html.BeginForm(ActionName,ControllerName,Post)来实现controller-action的路由, 2. Form里的每个input的name值统一,比如都命名为commandName, 每个input的value设为不同值. 3. 更改Action处理方法的参数, 添加一个参数为commandName,则commandName的值为input设置的value. 在controller中

一个Form多个提交动作Submit的解决方法

在开发工作共我们往往会遇到一个表单需要包含多个action不同的提交动作,这时候就不能在使用submit按钮来进行提交了,下面提供通过js来实现这一功能的方法 1 2 3 4 5 6 7 8      < form name = "demo" method = "post" > <!--YOUR DATA AREA--> < input type = "button" value = "添加" o

JavaScript 创建一个 form 表单并提交

<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <input onclick="MakeForm()" type="button" class="btn grey"

jsp页面:一个form,不同请求提交form

需求:一个表单中有一个请求 action="url"发送数据地址: 在表单外有一个请求,请求form表单提交的数据 我们用js来写:通过每次请求传不同的action=url; 例如: jsp: <form action="" method="post" id="form" name="from"> </form> <script> function submit(){ d

数据表格,查询、导出共用一个form表单,实现文件流方式下载

在开发中遇到问题是这样的: 在维护老的管理系统的过程中,老板说让加导出功能:项目中,查询的筛选条件是用的表单提交的方式写的. 解决方案有两种: 一.用ajax方式导出 var array = $('#frmSearch').serialize(); 获得表单数据后,用post方式提交给服务器,服务器返回文件所存在的网络地址,然后用windows.open()的方式下载文件 但是我希望文件下载后,能够把文件删除了:用上边方式就不太合适了,不能及时删除旧文件,于是想出下面的方式: 二.文件流的方式下

使用jstl el表达式对form表单的功能进行区分 比如新建和修改共用一个form

新建一个专栏,修改这个专栏信息 完全可以做在一个jsp的一个form中 但是,需要注意的是,使用mvc的对象属性自动封装的话 如果id为空,将会报错,无法进入controller中的 所以要在页面上判断,id是不是大于0,大于0表示已经传来了一个model这时候把id设为隐藏域 并且执行修改操作 <c:choose> <c:when test="${columnModel.id>= '0'}"> id存在,将执行update操作 <input typ

delphi 把Frame嵌入一个Form里面[转]

引言:最近编写delphi时遇到一个frame复用的问题,如何在一个form窗体添加一个已经编辑好的frame?就像delphi的组件一样方便使用.下面是自己总结的方法,虽然很简单,但是对不了解的同学还是一个小麻烦. 步骤: 1. 编辑一个frame页面,如下图. 2.编辑frame,为简单起见就一个编辑框和一个按钮好了.然后保存.再右键单击frame窗体选择add to palette把frame添加到组件面板. 3. 组件的名字名字就随便你自己定了,最后一步在主窗体里面添加这个frame.首

jquery中form中使用submit出现的问题,未解决

$("#login_btn").click(function(){在type为submit的按钮下 if($("#id_password").val().length == 0){//检验密码是否为空 $('form').submit(function(){ alert("1") return false; }); }else if($("#vali").val() != code){//验证码是否正确 $('form').s

C#中关闭第一个Form窗口,打开另一个新窗口方法

很多同学问怎么关闭一个FORM打开另一个新Form.这个问题最多的是在做登录验证时,使用第一个登录窗 登录成功后要关闭自己,然后打开新窗显示.没想到这个问题在.Net还成了问题,不过依然有很多方法解决. 典型的 Form1 f = new Form1(); f.Show(); this.Close(); 最后的关闭时把整个程序都关闭了 1隐藏法,原理就是把旧窗口隐藏掉,再打开新窗口. //新建一个NewForm窗口(NewForm是自己定义的Form) NewForm fm=new NewFor