You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加两个不同账户时出现重复记录的技术问题求助

解决添加不同账户时重复生成记录的问题

核心原因推测

从现象(添加不同账户生成4条重复记录、添加相同账户无异常)来看,大概率是前端提交逻辑重复触发或后端批量处理时数据集重复导致,以下是具体排查和修复方案:


前端排查与修复(针对JSP页面及联动逻辑)

1. 检查按钮点击事件是否重复绑定

如果账户下拉框的联动逻辑每次触发时都重新绑定Update按钮的点击事件,会导致点击一次触发多次提交。解决方式是绑定前先解绑旧事件:

// 联动逻辑中绑定提交事件时,先清除旧事件
$('#updateBtn').off('click').on('click', function(e) {
  e.preventDefault();
  // 执行表单提交逻辑
});

2. 禁用按钮防止重复提交

点击Update后立即禁用按钮,避免用户误操作或浏览器重试导致的重复提交,同时改用AJAX提交替代原生表单提交,彻底规避页面重载时的浏览器自动重试问题:

$('#updateBtn').on('click', function(e) {
  e.preventDefault();
  const $btn = $(this);
  $btn.prop('disabled', true);
  
  $.post('your-update-url', $('form').serialize(), function(res) {
    // 提交成功后刷新页面或更新列表
    location.reload();
  }).always(function() {
    // 无论成功失败,恢复按钮状态
    $btn.prop('disabled', false);
  });
});

3. 检查联动逻辑的DOM操作

确认选择新账户时,是否重复克隆了表单行、添加了重复的输入字段,导致提交时携带多组账户数据。可以在联动逻辑执行后,打印表单序列化数据排查:

// 账户选择事件触发后,打印表单数据
console.log($('form').serialize());

如果输出中包含重复的账户、站点字段,说明DOM操作存在重复添加问题,需要清理旧表单数据或避免重复插入DOM元素。


后端排查与修复(针对doUpdate()方法)

1. 添加幂等性校验

给每个提交请求生成唯一标识(如前端生成UUID),后端校验该标识是否已处理,避免重复执行插入逻辑:

public void doUpdate(HttpServletRequest request) throws Exception {
    String requestId = request.getParameter("requestId");
    // 从数据库/缓存中检查requestId是否已处理
    if (requestIdService.isProcessed(requestId)) {
        // 已处理过,直接返回
        return;
    }
    // 标记该请求已处理
    requestIdService.markAsProcessed(requestId);
    
    // 执行记录插入逻辑
    transactionService.saveTransactions(formData);
}

2. 检查批量插入的数据集

如果doUpdate()是批量处理前端传来的多组账户数据,确认是否遍历了重复的数据集。可以在方法开头打印数据集大小排查:

System.out.println("待处理的记录数:" + formDataList.size());

如果输出是4,说明前端传来了重复数据;如果是2但插入了4条,说明插入逻辑内部存在重复执行的分支。

3. 改用PRG模式避免页面重载重试

如果必须用原生表单提交,后端处理完成后重定向到结果页面,而非直接返回原页面,避免浏览器刷新时重复发送POST请求:

public void doUpdate(HttpServletRequest request, HttpServletResponse response) throws Exception {
    // 执行插入逻辑
    transactionService.saveTransactions(formData);
    // 重定向到列表页面,避免刷新重复提交
    response.sendRedirect("transaction-list.jsp");
}

验证步骤

  1. 打开浏览器开发者工具的网络面板,点击Update后查看请求数量:
    • 如果是2次请求:前端提交逻辑重复,按前端方案修复;
    • 如果是1次请求但插入4条:后端逻辑有问题,按后端方案排查。
  2. 对比不同账户和相同账户的请求参数,查看是否存在参数格式或数量的差异,定位触发重复的具体条件。

内容的提问来源于stack exchange,提问作者ackbNow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:11:15