我不想将?faces-redirect=true
附加到<h:commandButton />
中的每个操作,而是希望在faces-config.xml
中使用它一次,但我还不确定使用它的后果。
它规定将使用redirect
代替forward
。但后果是什么?这是一种不好的做法,它是否会影响持久性和servlet请求和响应?
对我来说,使用REDIRECT仅用于正确的URL浏览器显示。 我打算用这样的东西:
<navigation-rule>
<from-view-id>/*</from-view-id>
<navigation-case>
<from-outcome>*</from-outcome>
<redirect />
</navigation-case>
</navigation-rule>
非常感谢你的指导。
答案 0 :(得分:5)
重定向基本上指示浏览器创建全新的HTTP GET请求。因此,所有请求(和视图)作用域bean将在重定向点被删除。在表单操作期间设置的任何请求范围数据将不再可用于新请求中。如果这是一个主要问题,那么最好的办法就是将它放在会话范围内,但这会产生更大的影响:会话范围bean中的任何更改都会反映在同一个浏览器选项卡/窗口中发生的所有操作中会话。另一种方法是将感兴趣的数据作为重定向URL的查询字符串传递,但这很简单,很丑陋。
如果您确实有否数据需要保留在重定向的请求中,那么您可以这样做。但这给前面带来了一个新问题:你为什么要使用POST请求呢?您是否正在向服务器提交某些内容?或者您是否将此用于纯页面到页面导航?这个问题让我觉得它是后者。在这种情况下,您根本不应该使用POST进行页面到页面的导航,而只是使用GET。这可以通过<h:button>
(及其等效链接<h:link>
)
<h:button value="Next page" outcome="nextpage" />
如果它实际上是前者,我会坚持下去。您不想为POST请求添加书签。