这是我继承的问题。我们有一个 JSF/RichFaces/Seam 应用程序,出于安全原因,它没有设置缓存。当用户点击后退按钮,导致重新发布表单时,问题就出现了。有时(并且不一致)在点击后退按钮后重新发布表单会将支持 bean 属性设置为 null。当缓存设置为私有时,不会发生这种情况。不幸的是,这不是一个选择。
我一直在寻找解决方法,但我不确定是否有。
有谁知道用于此的标准模式?
这是我继承的问题。我们有一个 JSF/RichFaces/Seam 应用程序,出于安全原因,它没有设置缓存。当用户点击后退按钮,导致重新发布表单时,问题就出现了。有时(并且不一致)在点击后退按钮后重新发布表单会将支持 bean 属性设置为 null。当缓存设置为私有时,不会发生这种情况。不幸的是,这不是一个选择。
我一直在寻找解决方法,但我不确定是否有。
有谁知道用于此的标准模式?
有谁知道用于此的标准模式?
是的,Post-Redirect-Get模式。添加<redirect/>
到您感兴趣的导航案例中,以在 POST 之后执行对 GET 请求的重定向。然后后退按钮将转至 GET 请求。在 JSF 2.x 中,您还可以通过向?faces-redirect=true
结果添加参数来实现此目的。
然而,当您的 web 应用程序开发不佳时,它有一个缺点,即您从页面到页面发送 POST 请求而不是向自身发送 POST 请求(最好是 ajax 风格的)。这样,任何请求范围的 bean 在重定向的 GET 请求中都不再可用。
此外,当您使用命令链接而不是输出链接进行普通的页面到页面导航(例如菜单链接等)时,应该将这些链接固定为输出链接。使用 POST 在这里完全没有价值,它们应该从一开始就是 GET。
理想情况下,可以肯定的是,在 JSF 1.x webapps 中,如果您想要最佳的 SEO、可书签性和用户体验,则根本不应该有任何导航案例。