问题:
表单提交页面,刷新后,出现数据重复提交问题
原因:
1.保存数据后的跳转问题
@Action(value = "accountUpdate", results = { @Result(name = "success", type = ResultTypeConstants.VELOCITY , location = "accountView.vm") })
解释:进入编辑页面,提交数据到 accountUpdate.do ,数据编辑或添加完成后,跳转到accountView.vm,但浏览器上的URL依然是 */*/accoutUpdate.do,故刷新浏览器会出现重复提交问题
2.数据保存编辑操作的程序本身以及业务逻辑问题
(1)业务逻辑:账户由于需要审核,故分两张表存放相同的数据,主表与备份表,
原理:数据只要存放在一张表中,另外一张表起审核操作时,数据数据对照功能
出现问题的原因:对主从表的使用,在新旧版系统的不一致,即
旧版:数据存放主表,从表起对照作用
新版:数据存放从表,主表起对照作用
(2)程序本身
由于业务逻辑的变更,而程序又由于长时间没有进行维护,所以对于重复提交这种问题,没有
做出相应的判断,即可以通过查询判断该商户编号是否已经有关联的账信息来判断
解决:
1.处理数据更新的ACTION的跳转改为REDICT重定向
@Action(value = "accountUpdate", results = { @Result(name = "success", type = ResultTypeConstants.REDIRECT , location = "accountView.do") })
public String accountUpdate() throws Exception {
accountMessageUpdate();
return SUCCESS;
}
原因:浏览器上的URL位置改变了,再刷新页面也不会出现重复提交问题
其他:
若同时想向页面传输数据,但由于跳转该为REDICT而不是VELOCITY,采用如下办法
@Action(value = "accountUpdate", results = {
@Result(name = SUCCESS, params = {"flag", "${flag}"}, type = ResultTypeConstants.REDIRECT, location = "/accountView.do")})
public String test() {
return SUCCESS ;
}
其中flag可以设置为类的属性,通过set get方法,在整个类中都可以给他赋值,
也可以是方法中声明
扩展:
java防止表单重复提交
举例:生成token值
1.进入编辑添加页面
//跳转到添加或编辑页面时,设置token,防止重复提交
String tokenValue = UUID.randomUUID().toString();
//保存到session中
session.put("token", tokenValue);
//传值到页面上,提交操作时将从页面上获取的值与session中取的值进行比较
request.setAttribute("token", tokenValue);
2.编辑页面
<input name="token" type="hidden" value="$!token"/>
3.保存编辑操作
(1)token比较方法
//判断提交的json数据里的token和session里生成的token是否一致
private boolean isRepeat(String jsonToken){
Object st = session.get("token");
String stoken = st != null? st.toString() :"";
if(StringUtils.isBlank(stoken) || !stoken.equals(jsonToken)){
return true;
}
return false;
}
若token值不同,则说明进行了多次提交
(2)调用
String rtoken = obj.get("token") != null ? obj.get("token")+"":"";
if(isRepeat(rtoken)){
json.put("data", -1);
json.put("msg", "重复提交!");
}
分享到:
相关推荐
Struts表单重复提交问题 资源源于不但搜索,自由源于不但努力
Struts2文件上传下载和表单重复提交问题
表单重复提交跳到图书列表页面// /manager/bookServlet?当用户提交完请求,浏览器会记录下最后一次请求的全部信息。当用户按下功能键 F5,就会
我们大家再进行web开发的时候,必不可少会遇见表单重复提交问题。来给总结如何解决表单提交问题,欢迎大家交流指正。 首先我们在讨论如何解决表单重复提交问题之前先来解决三个问题:1.什么叫表单重复提交?2.什么...
javascript方式防止表单重复提交,
客户端防表单重复提交和服务器端session防表单重复提交.
提交表单后提交禁用提交按钮,防止重复提交.
/** * * @authors Benjamin * @date 2013-11-13 10:16:59 */ 一、常见的重复提交问题 a>点击提交按钮两次。 b>点击刷新按钮。 c>使用浏览器后退按钮重复之前的操作,导致重复提交表单。 d>使用浏览器历史记录重复...
springboot2.1+redis+拦截器 防止表单重复提交详细完整介绍,所用到的文件都上传了,下载即可使用。自己花了半天整理,并且测试通过,使用在实际项目中的,希望对每一个下载的朋友有帮助。
详细介绍struts+token机制解决表单重复提交问题。附带相关代码
基于springboot实现表单重复提交.docx
防止用户表单重复提交的完整demo 分别在js与后台中处理,js处理(针对网络慢情况) 后台处理(针对用户点击浏览器上的刷新按钮等)
服务器端避免表单的重复提交,利用同步令牌来解决重复提交的基本原理如下:(1)用户访问提交数据的页面,服务器端在这次会话中,创建一个session对象,并产生一个令牌值,将这个令牌值作为隐藏输入域的值,随表单一起发送到...
struts2中对表单重复提交的处理方法;包括处理两种典型的表单重复提交的思路和方法
当用户将信息提交到服务器,服务器响应采用forward方式调转到下一个页面后,此时地址栏中显示的是上个页面的URL,若刷新当前页面,浏览器会将再次提交用户先前输入的数据,就会再次出现表单重复提交的问题。...
运用struts2解决表单的重复提交问题
主要讲解了在structs怎样通过Token令牌解决表单重复提交的问题。附带了擦参考项目。
防止表单重复提交。判断是新打开的页面还是刷新的页面 判断是新打开的页面还是刷新的页面
今天小编就为大家分享一篇防止Layui form表单重复提交的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
这是一个关于防止表单重复提交的练习,大神勿喷!