前两种是利用javascript,后面一种是在使用Struts的情况下的参考实现:
1、javascript ,设置一个变量,只允许提交一次。
<script language="javascript">
var checkSubmitFlg = false;
function checkSubmit()
{
if (checkSubmitFlg == true)
{
return false;
}
checkSubmitFlg = true;
return true;
}
document.ondblclick =
function docondblclick()
{
window.event.returnValue = false;
}
document.onclick =
function doconclick()
{
if (checkSubmitFlg)
{
window.event.returnValue = false;
}
}
</script>
<html:form action="myAction.do"
method="post" onsubmit="return checkSubmit();">
2、还是javascript,将提交按钮或者image置为disable
<html:form action="myAction.do"
method="post"
onsubmit="getElById('submitInput')
.disabled = true;
return true;
">
<html:image
styleId="submitInput"
src="images/ok_b.gif"
border="0" />
</html:form>
3、利用struts的同步令牌机制
利用同步令牌(Token)机制来解决Web应用中重复提交的问题,Struts也给出了一个参考实现。
基本原理:
服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。
if (isTokenValid(request, true)) { // your code here return mapping.findForward("success"); } else { saveToken(request); return mapping.findForward ("submitagain"); }
Struts根据用户会话ID和当前系统时间来生成一个唯一(对于每个会话)令牌的,具体实现可以参考TokenProcessor类中的generateToken()方法。 1. //验证事务控制令牌,会自动根据session中标识生成一个隐含input代表令牌,防止两次提交 2. 在action中: //<input type="hidden" 3. action有这样的一个方法生成令牌 protected String generateToken HttpSession session = |
相关推荐
asp.net 页面防止重复提交(可用)
防止重复提交的总要解决方案 相信对struts的学者有帮助 大家看看
先说对话框(Dialog)里的表单提交 错误方案 说起错误方案,比如,点击提交按钮,本地验证,验证通过立即让按钮不可点,这些没问题,而我的错误点概括是:在某个最后执行的回调函数的最后一行,我做了2个操作:1,...
自定义封装注解类,(生成token存放到redis中)通过注解的方式解决API接口幂等设计防止表单重复提交
如何修改禁止多次重复提交
服务器端避免表单的重复提交,利用同步令牌来解决重复提交的基本原理如下:(1)用户访问提交数据的页面,服务器端在这次会话中,创建一个session对象,并产生一个令牌值,将这个令牌值作为隐藏输入域的值,随表单一起发送到...
防止重复提交java解决 B/S结构的软件开发中,特别是在越大型的分布式应用中体现的越明显,后端的处理往往会因为出现较多的时间消耗而引起延迟,这种延迟有可能过长而终使用户认为是自己的操作错误,导致他们重新...
struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...
利用Token机制解决重复重复提交
NULL 博文链接:https://feng5588feng.iteye.com/blog/1494002
防止刷新后退重复提交vs2005
本文实例总结分析了ThinkPHP防止重复提交表单的方法。分享给大家供大家参考,具体如下: 为什么会有表单重复的坑 在开发中,如果一个新增或修改的表单,在后台完成数据库操作后我们设定的不是跳转到其他页面,还是...
客户端跳转时用HttpservletResopse对象的sendRedirect函数实现,服务器端跳转是使用RequestDispather对象的forward方法实现的。这两者之间的区别主要体现在三个方面.......
主要介绍了浅谈利用Session防止表单重复提交,简单介绍表单重复提交的情况,分析,以及解决方法代码示例,具有一定借鉴价值,需要的朋友可以了解下。
下面给大家带来两种关于jquery 的ajax防止重复提交的解决方法,具体介绍如下所示: 1、第一种,对于onclick事件触发的的ajax 可以采用如下方法: 即在beforeSend中使点击按钮不可用,ajax结果返回后置为可用 $....
接口上面加上@NoRepeatSubmitAspect这个注解即可轻松完美解决重复提交问题,这个是Redis版本,性能最好,RedisUtils静态工具类也一并打包在内。如果项目不用redis,可以自行改成数据库查存校验!
这样就导致后台收到两次提交,从而进行两次处理,本文章向大家介绍php 防止表单重复提交的几种方法 1、前端解决 方法一: 可以通过前端来解决。当用户点了提交按钮之后,先使用js进行有效性判断,没问题后,将提交...
主要介绍了vue 按钮多次点击重复提交数据的问题,本文通过实例结合的形式给大家介绍的非常详细,需要的朋友可以参考下