struts的令牌机制解决重复提交是好的方案吗?
看了一下Struts令牌的原理,用token机制解决重复提交问题,看似有效。
但是实际的情况,感觉这个功能很鸡肋。
我的重复提交主要是快速连续点击提交按钮造成的,这样浏览器连续发多个请求过去,根据token来判断,只有第一个请求被执行,后面的被拒绝,但是第一个请求执行完成的返回内容没有了,浏览器只能返回最后一个请求的结果,而这个请求被拒绝(空白或者导出错误页),用户无法知道是否提交成功了。
另外,如果点击提交按钮是ajax请求,连续点击时,第一个请求的执行结果json无法返回,而后面的请求被拒,无法返回正确的数据,而且,ajax请求时,页面不刷新,应允许正常的多次提交(如修改保存),仅防止快速点击按钮造成的重复提交,所以提交请求执行后,应重置session中的token,并把新token值返回用于重置页面中的隐藏域,使下一次提交时能够成功,但由于第一个成功的请求无法返回,token也无法重置,这样再点击提交按钮就总是报重复提交了。
有人说用前端解决,按钮点击后禁用,直到ajax返回再启用,或返回新页面内容或跳转到新页。但是这样的话,还要那个令牌机制干嘛?前端方案毕竟需要每个页面手写的,令牌机制则是框架层面的,如果能避免上述问题,才是最佳方案,是否我对struts令牌的理解有误?Struts也有这些问题吗?