更改ajax导航上的URL

时间:2013-04-17 10:38:59

标签: ajax jsf url jsf-2 navigation

我有一个JSF应用程序,我想在导航时更改浏览器地址栏中的URL。当我在Home.xhtml并且我提​​交表单时,它会显示下一页AppHome.xhtml,但浏览器地址栏中的网址不会更改。

这是提交按钮:

<p:commandButton value="Connect" update="panel" id="ajax" action="#{user.check}" styleClass="ui-priority-primary"/>

以下是导航规则:

<navigation-rule>
    <from-view-id>/Home.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>Success</from-outcome>
        <to-view-id>/AppHome.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>Failure</from-outcome>
        <to-view-id>/Home.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

执行此导航时,如何更改浏览器地址栏中的URL?

1 个答案:

答案 0 :(得分:7)

仅当在与当前请求URL不同的URL上触发同步请求时,才会更改浏览器地址栏中的URL。 ajax请求不是同步请求。因此浏览器地址栏中的URL永远不会改变。此外,JSF默认情况下将表单提交给当前URL(检查生成的HTML action的{​​{1}}属性),因此在同步POST请求中URL也永远不会更改。

您需要在其他网址上发送同步GET请求才能更改浏览器地址栏中的网址。重定向将强制执行同步GET请求。您可以通过向<form>添加<redirect/>条目来实现此目的。

您反对执行重定向绝对没有理由。它最有可能在其他地方引起,因此需要在别处解决。是慢速页面加载和/或内容闪烁(闪烁)?这个问题反过来与重定向无关,需要以不同的方式解决。这可以通过适当的缓存来解决。或者您是否在重定向时丢失面部消息?通过flash scope使用Flash#setKeepMessages()

另见:


无关到具体问题,导航案例是soo JSF 1.x.您是否了解新的JSF 2.x implicit navigation功能?确保您正在阅读针对JSF 2.x而不是针对JSF 1.x的最新JSF教程。

如果您按如下方式实施操作方法,则可以完全删除整个<navigation-case>

<navigation-rule>