在使用帆软(FineReport)进行数据填报时,用户多次点击提交按钮导致数据重复提交是一个常见问题。尤其是在网络延迟或页面响应较慢的场景下,用户误以为操作未生效而重复触发提交事件,造成数据库中出现多条相同记录。
该问题不仅影响数据准确性,还可能引发后续业务逻辑错误,如财务对账异常、审批流程混乱等。因此,如何通过前端控制与后端机制有效防止此类重复提交行为,成为开发人员在设计填报报表时必须解决的关键技术难点。
在帆软FR中可通过JavaScript脚本实现按钮级别的防重复提交:
// 在提交前执行
function beforeSubmit() {
var btn = document.getElementById("submitBtn");
if (btn.disabled) {
FR.Msg.alert("请勿重复提交!");
return false;
}
btn.disabled = true;
btn.value = "提交中...";
setTimeout(function() {
btn.disabled = false;
btn.value = "提交";
}, 5000); // 设置最长等待时间
return true;
}
// 绑定到填报事件
FR.event.on("afterload", function() {
const submitButton = FR.getWidgetByName("SUBMIT_BUTTON");
if (submitButton) {
submitButton.setAttr("onclick", "beforeSubmit();");
}
});
结合帆软服务端API与Java后端扩展,实现基于业务主键的幂等校验:
public class IdempotentSubmitHandler implements ActionInterface {
private static final String REDIS_PREFIX = "fr:submit:";
@Override
public ActionResult actionFn(HttpServletRequest req, HttpServletResponse res) {
String userId = getCurrentUser(req);
String formKey = req.getParameter("formKey"); // 表单唯一标识
String timestamp = req.getParameter("timestamp");
String token = userId + ":" + formKey + ":" + timestamp;
Boolean acquired = RedisUtil.setIfAbsent(REDIS_PREFIX + token, "1", 10, TimeUnit.MINUTES);
if (!acquired) {
return new ActionResult(ActionResult.FAILURE, "请勿重复提交");
}
// 执行实际数据写入逻辑
try {
saveFormData(req);
return new ActionResult(ActionResult.SUCCESS, "提交成功");
} catch (Exception e) {
RedisUtil.delete(REDIS_PREFIX + token);
throw e;
}
}
}
graph TD A[用户点击提交] --> B{按钮是否已禁用?} B -- 是 --> C[弹出提示: 正在提交] B -- 否 --> D[发送Token至后端] D --> E[后端验证Token唯一性] E -- 已存在 --> F[返回重复提交错误] E -- 不存在 --> G[存储Token并处理业务] G --> H[写入数据库] H --> I[清除Token缓存] I --> J[返回成功结果] J --> K[前端恢复按钮状态]
相关知识
帆软数据重复提交如何避免?
鸢尾数据分析用什么工具
电商如何整合跨平台数据?这份电商数据化建设方案一学就会!
科脉五大力之技术力:云帆OS平台AI功能破局零售数据分析,以智能驱动经营增长
鸢尾花数据集如何可视化
阿里巴巴花卉数据分析怎么做的啊
鲜花店数据分析图怎么做
鲜花销售数据分析怎么写好
花卉市场数据分析怎么写好
花卉深加工分析数据怎么做的呢
网址: 帆软数据重复提交如何避免? https://m.huajiangbk.com/newsview2500184.html
| 上一篇: ECharts散点图大小如何根据 |
下一篇: 二维凝胶的定量分析 |