JFinal

登录 注册

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才失效了,这两个区别?

评论

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

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

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