<commandlink action =“...”>中“?faces-redirect = true”的语义以及为什么不在任何地方使用</commandlink>

时间:2012-06-28 10:03:09

标签: jsf redirect post navigation

我想了解在JSF2.0中"?faces-redirect=true"标记的action属性中附加<h:commandlink>背后的语义是什么。无论是使用它还是使用它,应用程序确实导航到操作中指定的目标页面。因此,乍一看,似乎唯一的效果是装饰,即向用户提供反馈(如果他正在查看浏览器的访问过的URL),他已经移动到新页面。但如果它是如此无害且无副作用,我无法理解为什么它不是默认行为。我怀疑它与JSF2.0的基于post的机制有关。我已经注意到在浏览JSF应用程序时,他在浏览器中看到的URL(未使用?faces-redirect=true时)是“上一页”“页面”。

元NB。我在防火墙后面并且受到“SO需要来自其他域的外部JavaScript”问题的困扰,所以我为没有格式化而道歉。当我可以从其他域访问时,我还会在几个小时内就您的答案提供反馈。

1 个答案:

答案 0 :(得分:11)

根本不应使用POST执行页面到页面的导航。您应该使用普通<h:link><h:button>代替<h:commandLink><h:commandButton>

所以而不是

<h:commandLink value="Next page" action=nextpage.xhtml?faces-redirect=true" />

你应该实际使用

<h:link value="Next page" outcome="nextpage.xhtml" />

这有一个主要的好处,该网站现在SEO友好。 Searchbots即不索引表格。

如果您需要提交包含某些用户输入的表单,请使用<h:commandLink> 。但是,如果需要有条件地渲染/包含,结果通常只会出现在同一页面中。只有在绝对需要转到不同页面的成功提交(例如登录/注销)时,您才应该发送重定向。这就是所谓的Post-Redirect-Get pattern

另见