【问题标题】:Get JSF 2 url to change after first, not second click获取 JSF 2 url 在第一次而不是第二次单击后更改
【发布时间】:2012-01-12 18:24:09
【问题描述】:

JSF URL 在第一次点击后似乎没有改变,只有在第二次点击之后。例如。从home.jsf 导航到auction.jsf 时,显示的页面已经是auction.jsf,但浏览器地址栏中的URL 保持在home.jsf,直到我第二次点击拍卖链接。为什么会这样?有没有办法禁用它,并让 url 正确显示?

【问题讨论】:

    标签: url jsf-2 navigation


    【解决方案1】:

    您似乎是通过 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>
    

    但是,如前所述,这是一种解决方法,而不是解决方案。

    另见:

    【讨论】:

    • 谢谢,BalusC。但是大多数,实际上我所有的相关页面都带有表单,所以我需要一个 POST。这还能用吗?
    • 那你需要和POST一起发送什么数据呢?实际上什么都没有,因为它只是页面到页面的导航,对吗?只需使用&lt;h:link&gt;。不管你是否已经有表格。 &lt;h:link&gt; 不关心它是否在表单中。或者如果您确实需要传递请求参数,只需在链接中使用&lt;f:param&gt;,在目标页面中使用&lt;f:viewParam&gt;。在 POST 之后使用 GET 重定向会破坏整个 POST 请求,那么为什么不直接执行 GET 呢? POST 首先是页面到页面导航作业的错误工具。
    • 现在我很困惑。我实际上需要发送数据,并且在某些情况下还需要使用数据库中的新数据准备页面。在我的导航方法中,我一直在检查 bean 是否在会话中,如果是,则在其上设置一些值。例如 be.setAuctionItems。 (在某些情况下,有相当多的准备工作。)如果已经不在会话中,我在 PostConstruct 中做同样的工作。有没有更好的办法?
    • 换句话说,重定向可能也无法为您解决问题。由于具体的功能要求尚不清楚,我只能建议阅读“另见”链接(及其所有“另见”链接),如有必要,请阅读Communication in JSF2
    【解决方案2】:

    您需要将faces-redirect=true 添加到您的网址。查看来自 Mkyong.com 的简短 tutorial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      相关资源
      最近更新 更多