关于数据重复提交的问题

刚开始学习jfinal,最近碰到一个问题希望能给与指教,不胜感激!

问题代码:

public void addDept() {

Dept dept = getModel(Dept.class, "dept");

boolean flag = dept.save();

if (flag) {

log.info("部门" + dept.getDname() + "添加成功,添加时间" + new Date());

render("/admin/dept/deptManage.jsp");

}

}


问题描述:

这是一个添加部门的方法,保存之后render到列表页,整体上没问。我用的浏览器是360安全浏览器,习惯性的使用 “重新加载框架” 这个功能,没想到的是又多出来一条新数据,就是我之前刚提交的,请问,这是什么原因? 

评论区

JFinal

2017-03-07 22:38

这个是数据重复提交的问题,使用任何 web 框架都会面临此问题,jfinal 为此提供的支持是 Controller 中的 createToken(...) 与 validateToken(...)。

简单来说是在前一个 action 中创建 token,并 render 到表单页面,在此表单页面将 token 赋值给一个 hidden 的 input,最后在提交的 action 中验证 token 值

jfinal.com 并没有使用上面的解决方案,而是如下方式:
1:提交全部采用 ajax 方式
2:在发送 ajax 前用一个 isLoading 变量,并赋值为 true,然后再发送 ajax 请求
3:当用户在 ajax 请求返回之前,点击提交按钮时,由于 isLoadin 为 true 值,所以不发起请求,也就不会重复提交
4:当用户按 F5 时,显然无法发起提交,因为请求是 ajax 触发的,不是一个表单提交触发的

加入俱乐部 http://jfinal.com/club,可以获取本站 jfinal.com 的所有源代码,各种实用的功能全有

zhongshg

2017-03-08 08:54

@JFinal 感谢大神百忙之中答疑!

二阳

2017-10-24 11:20

@JFinal 这是客户端的处理,如果模拟ajax请求一直请求服务端呢?服务端没做处理

热门反馈

扫码入社