【发布时间】:2012-01-12 18:24:09
【问题描述】:
JSF URL 在第一次点击后似乎没有改变,只有在第二次点击之后。例如。从home.jsf 导航到auction.jsf 时,显示的页面已经是auction.jsf,但浏览器地址栏中的URL 保持在home.jsf,直到我第二次点击拍卖链接。为什么会这样?有没有办法禁用它,并让 url 正确显示?
【问题讨论】:
标签: url jsf-2 navigation
JSF URL 在第一次点击后似乎没有改变,只有在第二次点击之后。例如。从home.jsf 导航到auction.jsf 时,显示的页面已经是auction.jsf,但浏览器地址栏中的URL 保持在home.jsf,直到我第二次点击拍卖链接。为什么会这样?有没有办法禁用它,并让 url 正确显示?
【问题讨论】:
标签: url jsf-2 navigation
您似乎是通过 POST 而不是 GET 导航。您不应该首先通过 POST 执行逐页导航。将<h:commandLink> 替换为<h:link>。
所以,不要浏览
<h:form>
<h:commandLink value="Auction" action="auction" />
</h:form>
但是通过
<h:link value="Auction" outcome="auction" />
JSF POST 表单基本上提交到当前 URL,并且默认情况下,任何导航都由服务器端转发使用 RequestDispatcher#forward() 执行(如果您非常熟悉基本的 Servlet API,您就会知道这意味着什么)。您可以改用执行重定向来解决问题
<h:form>
<h:commandLink value="Auction" action="auction?faces-redirect=true" />
</h:form>
但是,如前所述,这是一种解决方法,而不是解决方案。
【讨论】:
<h:link>。不管你是否已经有表格。 <h:link> 不关心它是否在表单中。或者如果您确实需要传递请求参数,只需在链接中使用<f:param>,在目标页面中使用<f:viewParam>。在 POST 之后使用 GET 重定向会破坏整个 POST 请求,那么为什么不直接执行 GET 呢? POST 首先是页面到页面导航作业的错误工具。
您需要将faces-redirect=true 添加到您的网址。查看来自 Mkyong.com 的简短 tutorial。
【讨论】: