我有一个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时执行该导航?
在浏览器地址栏中的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";
}
}