问题:
表单提交页面,刷新后,出现数据重复提交问题
原因:
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", "重复提交!");
}
分享到:
相关推荐
标题"表单重复提交问题1"所涉及的核心知识点是防止Web表单的多次提交。在描述中提到的情况,用户完成表单提交后,如果按下F5刷新页面,浏览器会重新发送之前表单的POST请求,导致数据可能被再次处理。这通常发生在...
在处理用户表单提交时,Struts框架可能会遇到一个常见的问题,即表单重复提交。这种情况通常发生在用户点击提交按钮后,由于网络延迟或其他原因导致请求被多次发送,从而可能对服务器端造成多次数据插入或更新,导致...
我们大家再进行web开发的时候,必不可少会遇见表单重复提交问题。来给总结如何解决表单提交问题,欢迎大家交流指正。 首先我们在讨论如何解决表单重复提交问题之前先来解决三个问题:1.什么叫表单重复提交?2.什么...
一、表单重复提交问题 表单重复提交可能发生在用户点击提交按钮后,由于网络延迟或刷新页面等原因,导致请求被多次发送到服务器。如果不加以控制,可能会导致同一份数据被处理多次,从而对数据库造成不必要的影响。 ...
表单重复提交问题主要是因为Web请求的工作方式。每次用户刷新页面时,如果表单已经提交过,则该表单会再次被提交。这对于某些应用场景来说是不可接受的,比如支付系统、订单系统等。因此,如何有效地避免表单的重复...
在实际应用中,文件上传和下载以及防止表单重复提交是两个常见的需求,同时也是开发者必须掌握的重要技能。 1. **文件上传** 文件上传功能在Struts2中通过`Struts2`提供的插件来实现,主要依赖于`Apache Commons ...
在使用Layui设计表单时,经常会遇到表单提交后页面刷新导致的重复提交问题。为了解决这个问题,开发者需要确保表单只提交一次,防止不必要的数据重复处理或者服务器的重复计算。下面详细解释几种防止Layui表单重复...
总的来说,Struts Token机制通过维护一个临时的、一次性使用的Token,有效地解决了Web应用中的表单重复提交问题,提高了系统的稳定性和安全性。在实际开发中,应根据项目需求灵活运用并优化此机制。
在Web开发中,表单重复提交是一个常见的问题,可能导致数据的冗余或错误。JavaScript作为客户端脚本语言,可以通过多种策略来防止用户意外或恶意地多次提交表单。以下是一些关键的知识点: 1. **禁用提交按钮**:最...
1. **表单重复提交问题**:当用户在提交表单时,由于网络延迟或用户误操作,可能会导致同一个表单被多次提交。例如,在购物网站上,用户可能因点击按钮太快而无意中购买了多份商品。 2. **Struts2框架**:Struts2是...
通过以上步骤,我们可以有效地防止Struts2应用中的表单重复提交问题。这个机制不仅提高了用户体验,也避免了因重复提交导致的数据不一致。在实际项目中,根据具体需求,可能还需要结合其他验证机制,如JavaScript的...
首先,我们需要理解表单重复提交的问题。当用户点击提交按钮多次或者由于网络延迟导致的重复提交,服务器可能会接收到相同的数据请求多次,这可能会对业务逻辑产生不良影响。例如,在电商网站中,如果用户多次点击...
在开发基于ThinkPHP框架的Web应用时,防止用户通过浏览器...总之,在开发中应当根据实际应用场景选择合适的方法,并注意可能的浏览器缓存和用户操作行为导致的表单重复提交问题,确保Web应用的数据处理安全和一致性。
除了直接使用redirect,还可以使用redirectAction,并在result中配置actionName参数,这样提交后会通过另一个action来执行,从而避免了直接刷新带来的重复提交问题。 在具体实现上,通过修改result元素的type属性来...
本篇文章将深入探讨如何...总的来说,结合Redis和Spring Boot可以有效地解决Web应用中的表单重复提交问题,提供了健壮性和可扩展性。在实际项目中,可以根据具体需求进行优化和调整,以满足更高的性能和安全性要求。
首先,我们来了解一下什么是表单重复提交问题。当用户填写并提交一个表单后,如果网络延迟或者用户误操作,可能会导致同一份表单数据被多次提交。这对于诸如转账、下单等业务来说,可能会带来严重后果。 Struts2的...
在Web开发中,用户表单重复提交是一个常见的问题,它可能导致数据冗余或者数据库状态的不一致。本示例提供了一种解决方案,包括在前端JavaScript和后端进行处理,以防止用户因网络延迟或误操作导致的多次提交。 ...
在ASP.NET web应用程序中,表单重复提交是一个常见的问题,可能导致数据不一致或者数据库操作的冗余。为了确保用户在提交表单时不会无意或有意地多次发送请求,我们需要实施有效的防止表单重复提交的策略。以下是...
提交表单后提交禁用提交按钮,防止重复提交.