避免在Spring中重复提交表单的最佳方法是什么。此框架是否提供任何特殊功能来处理此问题(例如,作为Struts中的Synchronizer Token)?
有多种避免重复提交的方法,可以将其结合使用:
disable点击几秒钟后,使用JavaScript 按钮。这样可以避免由于不耐烦的用户多次单击按钮而导致多次提交。
disable
提交后发送重定向,这称为Post-Redirect-Get(PRG)模式。这样可以避免由于用户在结果页上按F5键而忽略了浏览器关于将重新发送数据的警告,或者通过浏览器的后退/前进按钮来回导航而忽略了相同的警告而导致的多次提交。
请求页面时生成唯一的令牌,并将其放入会话范围和表单的隐藏字段中。在处理期间,检查令牌是否存在,然后立即将其从会话中删除并继续进行处理。如果令牌不存在,则进行块处理。这将避免上述类型的问题。
在Spring中,您可以RedirectView用作PRG模式的实现(如第2点所述)。另外两点需要自己实现。
RedirectView