知识大全 struts2中一个form多个提交的方法
Posted 知
篇首语:书到用时方恨少,事非经过不知难。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 struts2中一个form多个提交的方法相关的知识,希望对你有一定的参考价值。
在很多Web应用中 为了完成不同的工作 一个HTML form标签中可能有两个或多个submit按钮 如下面的代码所示
<! [if !supportLineBreakNewLine] >
< action= method= post >
<input type= submit value= 保存 />
<input type= submit value= 打印 />
</>
由于在<form>中的多个提交按钮都向一个action提交 使用Struts Action的execute方法就无法判断用户点击了哪一个提交按钮 如果大家使用过Struts x就会知道在Struts 之前的版本需要使用一个LookupDispatchAction动作来处理含有多个submit的form 但使用LookupDispatchAction动作需要访问属性文件 还需要映射 比较麻烦 从Struts 开始 加入了一个EventDispatchAction动作 这个类可以通过java 反射来调用通过request参数指定的动作(实际上只是判断某个请求参数是不存在 如果存在 就调用在action类中和这个参数同名的方法) 使用 EventDispatchAction必须将submit的name属性指定不同的值以区分每个submit 而在Struts 中将更容易实现这个功能
当然 我们也可以模拟EventDispatchAction的方法通过request获得和处理参数信息 但这样比较麻烦 在Struts 中提供了另外一种方法 使得无需要配置可以在同一个action类中执行不同的方法(默认执行的是execute方法) 使用这种方式也需要通过请求参来来指定要执行的动作 请求参数名的格式为
action!method action
注 由于Struts 只需要参数名 因此 参数值是什么都可以
下面我就给出一个实例程序来演示如何处理有多个submit的form
【第 步】实现主页面(more_submit jsp)
<%@ page language= java import= java util * pageEncoding= GBK %>
<%@ taglib prefix= s uri= /struts tags %>
<>
<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>
</>
在more_submit jsp中有两个submit 保存和打印 其中分别通过method属性指定了要调用的方法 save和print 因此 在Action类中必须要有save和print方法
【第 步】实现Action类(MoreSubmitAction)
package action;
import javax servlet *;
import opensymphony xwork ActionSupport;
import apache struts interceptor *;
public class MoreSubmitAction extends ActionSupport implements
ServletRequestAware
private String msg;
private javax servlet HttpServletRequest request;
// 获得HttpServletRequest对象
public void setServletRequest(HttpServletRequest request)
this request = request;
// 处理save submit按钮的动作
public String save() throws Exception
request setAttribute( result 成功保存[ + msg + ] );
return save ;
// 处理print submit按钮的动作
public String print() throws Exception
request setAttribute( result 成功打印[ + msg + ] );
return print ;
public String getMsg()
return msg;
public void setMsg(String msg)
this msg = msg;
上面的代码需要注意如下两点
save和print方法必须存在 否则会抛出java lang NoSuchMethodException异常
Struts Action动作中的方法和Struts x Action的execute不同 只使用Struts Action动作的execute方法无法访问request对象 因此 Struts Action类需要实现一个Struts 自带的拦截器来获得request对象 拦截器如下
apache struts interceptor ServletRequestAware
【第 步】配置Struts Action
struts xml的代码如下
<?xml version= encoding= UTF ?>
<!DOCTYPE struts PUBLIC
//Apache Sofare Foundation//DTD Struts Configuration //EN
dtd >
<struts>
<package name= demo extends= struts default >
<action name= submit class= action MoreSubmitAction >
<result name= save >
/result jsp
</result>
<result name= print >
/result jsp
</result>
</action>
</package>
</struts>
【第 步】编写结果页(result jsp) <%@ page pageEncoding= GBK %>
<>
<head>
<title>提交结果</title>
</head>
<body>
<h >$result</h >
</body>
</>
在result jsp中将在save和print方法中写到request属性中的执行结果信息取出来 并输出到客户端
启动Tomcat后 在IE中执行如下的URL来测试程序
大家也可以直接使用如下的URL来调用save和print方法
调用save方法//localhost: /moresubmit/submit!save action
调用print方法//localhost: /moresubmit/submit!print action
cha138/Article/program/Java/hx/201311/26511相关参考
知识大全 LookupDispatchAction类处理一个form多个
Struts1.x系列教程(19):LookupDispatchAction类处理一个form多个 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜
Web应用中避免Form重复提交的三种方案 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!前两种是利
在strutsxml中 <actionname=registerclass=sunxinstrutsactionRegisterAction> <!配置异常映射当Regist
今天在学习的时候碰到了这个问题不知道怎么搞定了也就是在提交表单的时候另外传递一个参数过去这个参数不是那些里面的东西比如要编辑一篇新闻原来转过来了这个新闻对应的编号类似这样intidd=(null=
本篇文章是对php防止form重复提交的方法进行了详细的分析介绍需要的朋友参考下 php防止表单重复提交实例复制代码代码如下:<?phpsession_start();$_SESS
改善Form提交数据的UI交互设计 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数据一次校验&
知识大全 JSP、Struts避免Form重复提交的几种方案
JSP、Struts避免Form重复提交的几种方案 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Struts2国际化与防止刷新重复提交表单 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本实例
知识大全 百度百科词条提交之后,提示该内容有多个版本正在等待审核,大概需要多久我才能再提交成功
百度百科词条提交之后,提示该内容有多个版本正在等待审核,大概需要多久我才能再提交成功这种情况你不要提交新的,这个是有一个别人已经提交了一个版本,你要等他的审核结束,才可以编辑与提交的,不管之前的一个人
在平时使用s:iterator这个迭代标签一般我们都是把一个相同类型的多个对象放入一个集合当中那么是否可以放入不相同的对象来迭代呢?日常工作有时候可能是需要这样来简化程序的我今天测试了一下好像完全