在AJAX导航变更网址(Change URL on ajax navigation)

2019-10-18 01:23发布

我有一个JSF应用程序,我想在浏览器地址栏中的URL进行导航上的改变。 当我在Home.xhtml和我提交表单,它显示下一页AppHome.xhtml ,但在浏览器地址栏中的URL不会改变。

这里的提交按钮:

<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时执行该导航?

Answer 1:

在浏览器地址栏中的URL时同步请求被在不同的URL不是当前请求的URL解雇只改变。 一个AJAX请求不是一个同步请求。 因此,在浏览器地址栏中的URL永远不会改变。 此外,JSF默认提交表格的当前URL(检查action所产生的HTML的属性<form>所以网址也将永远不会对同步POST请求而改变。

你需要在不同的URL发送一个同步GET请求,以改变在浏览器地址栏中的网址。 一个重定向将迫使同步GET请求。 可以通过添加实现这一<redirect/>进入该<navigation-case>

你对执行重定向厌恶完全没有理由。 它最有可能在其他地方造成的,因此需要在其他地方解决。 它是缓慢的页面加载和/或内容(闪烁)的闪光? 这个问题反过来又无关的重定向,需要不同的解决。 这是通过适当的缓存来解决。 或者是,你对重定向失去的面孔消息? 客人可以使用的闪光范围通过Flash#setKeepMessages()

也可以看看:

  • 如何在JSF导航? 如何使URL反映当前页面(而不是以前的一个)
  • 加载过程中JSF页面闪烁,而在PROJECT_STAGE发展
  • JSF缓存静态资源筛选
  • 如何显示面临重定向的页面信息

无关的具体问题,导航案件洙JSF 1.x的 你知道新的JSF 2.x中的隐式导航功能? 请确保您正在阅读多达针对JSF 2.x的,而不是针对JSF 1.x中的那些日期JSF教程

你可以摆脱整体的<navigation-rule>完全如果实现了操作方法如下:

public String check() {
    // ...

    if (fail) {
        return null; // Goes back to same page while keeping JSF view state.
    } else {
        return "/AppHome?faces-redirect=true";
    }
}


文章来源: Change URL on ajax navigation