jfinal的表单重复提交疑问

在jfinal中对表单重复提交的解决方法不知道我理解的对不对

后台:

public void add() {
    createToken("blogToken", 30*60); //过期时间设置为30分钟    render("add.html");
}
	
@Before(BlogValidator.class)public void save() {
    getModel(Blog.class).save();
    list();
}


 页面的话在你要防止重复提交数据的form中添加

前端页面:

<input type="hidden" name="blogToken" value="${blogToken}" />

接下来你可以在BlogValidator中的

 

protected void validate(Controller c) {
    validateToken("blogToken", "msg", "alert('上次已保存,请不要重复提交')");
}

也可以把validateToken放到action中如果返回true表示不是重复提交!

如果false表示是重复提交

疑问:

  1. 如果我用ajax去异步提交表单,验证成功后我的token失效了,是否要在后台处理表单的action后返回一个新的token到前端页面,不然前端此时保存的token是失效的永远无法提交下次表单

  2. 如果我设了有效期,用户在页面停留太久了导致token失效,他等失效后去提交表单,这个时候我如何处理去刷新他的token,我怎么区别这个token是由于用户等待时间太久导致token失效呢,还是由于用户提交了2次token才失效了,这两个区别?

评论区

JFinal

2017-07-16 11:27

主流程是先获取一个 token 值,提交的时候这个 token 值作为参数一起提交,后端再通过 validateToken 进行验证,验证通过则放行。

机制定好了,具体怎么玩看你自己的应用场景,你上面的疑问是具体问题,而 token 的机制是一个底层问题

此外,如果 BlogValidator 中的验证代码很少,也可以不需要这个类,简单的在 controller 中通过下面的代码来验证 token 即可:
if (validateToken()) {
do service;
} else {
renderJson("msg", "请勿重复提交");
}

hotsmile

2017-09-01 10:42

JFinal2.1支持token吗? @JFinal

JFinal

2017-09-01 11:04

@hotsmile 很多年前就支持

二阳

2017-10-24 11:10

你好,请问,这两个疑问是如何解决的,我也面临这个问题。

EATI001

2017-11-06 11:02

@JFinal这个问题的确也是哦,自定token失效时间后,界面点击下次提交依然提示无法重新提交,只能刷新界面才能进行下次提交。

热门反馈

扫码入社