Hol*_*ysh 1 navigation ajax url jsf jsf-2
我有一个JSF应用程序,我希望在导航中更改浏览器地址栏中的URL.当我打开Home.xhtml并提交表单时,它会显示下一页AppHome.xhtml,但浏览器地址栏中的URL不会更改.
这是提交按钮:
<p:commandButton value="Connect" update="panel" id="ajax" action="#{user.check}" styleClass="ui-priority-primary"/>
Run Code Online (Sandbox Code Playgroud)
这是导航规则:
<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>
Run Code Online (Sandbox Code Playgroud)
执行此导航时,如何更改浏览器地址栏中的URL?
仅当在与当前请求URL不同的URL上触发同步请求时,才会更改浏览器地址栏中的URL.ajax请求不是同步请求.因此浏览器地址栏中的URL永远不会改变.此外,JSF默认将表单提交给当前URL(检查action生成的HTML 的属性<form>),因此URL也不会在同步POST请求中更改.
您需要在不同的URL上发送同步GET请求,以便更改浏览器地址栏中的URL.重定向将强制执行同步GET请求.您可以通过添加<redirect/>条目来实现此目的<navigation-case>.
你反对执行重定向的厌恶绝对没有理由.它最有可能在其他地方引起,因此需要在其他地方解决.是慢速页面加载和/或内容闪烁(闪烁)?这个问题反过来与重定向无关,需要以不同的方式解决.这可以通过适当的缓存来解决.或者是你在重定向上丢失面部消息?通过使用闪存范围Flash#setKeepMessages().
与具体问题无关,导航案例是JSF 1.x. 您是否了解新的JSF 2.x 隐式导航功能?确保您正在阅读针对JSF 2.x的最新JSF教程,而不是针对JSF 1.x的JSF教程.
<navigation-rule>如果你按如下方式实现action方法,你可以完全摆脱整个过程:
public String check() {
// ...
if (fail) {
return null; // Goes back to same page while keeping JSF view state.
} else {
return "/AppHome?faces-redirect=true";
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4094 次 |
| 最近记录: |