JSF <redirect>使用</redirect>的后果

时间:2011-06-12 22:15:47

标签: java jsf

我不想将?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>

非常感谢你的指导。

1 个答案:

答案 0 :(得分:5)

重定向基本上指示浏览器创建全新的HTTP GET请求。因此,所有请求(和视图)作用域bean将在重定向点被删除。在表单操作期间设置的任何请求范围数据将不再可用于新请求中。如果这是一个主要问题,那么最好的办法就是将它放在会话范围内,但这会产生更大的影响:会话范围bean中的任何更改都会反映在同一个浏览器选项卡/窗口中发生的所有操作中会话。另一种方法是将感兴趣的数据作为重定向URL的查询字符串传递,但这很简单,很丑陋。

如果您确实有数据需要保留在重定向的请求中,那么您可以这样做。但这给前面带来了一个新问题:你为什么要使用POST请求呢?您是否正在向服务器提交某些内容?或者您是否将此用于纯页面到页面导航?这个问题让我觉得它是后者。在这种情况下,您根本不应该使用POST进行页面到页面的导航,而只是使用GET。这可以通过<h:button>(及其等效链接<h:link>

来实现
<h:button value="Next page" outcome="nextpage" />

如果它实际上是前者,我会坚持下去。您不想为POST请求添加书签。

另见: