我正在使用JSF2和GlassFish,PrimeFaces 2.1。
这样可行,showCreateProfile()
方法被点击,方法返回“profileForm”,浏览器会重定向到该页面:
<h:commandLink action="#{profileHandler.showCreateProfile}" value="#{msg.menu_createNewProfile}" />
但是,这不起作用,showCreateProfile()
方法获得命中,方法返回“profileForm”,但浏览器不会重定向到页面。我尝试了三件不同的事情,但没有运气:
<p:commandLink action="#{profileHandler.showCreateProfile}" value="#{msg.menu_createNewProfile}" />
<p:commandLink action="#{profileHandler.showCreateProfile}" value="#{msg.menu_createNewProfile}" ajax="false" />
<p:commandLink action="#{profileHandler.showCreateProfile}" value="#{msg.menu_createNewProfile}" ajax="false" immediate="true"/>
任何想法我做错了什么?
答案 0 :(得分:15)
Primefaces'p:commandLink
默认触发ajax请求。它不返回整个HTTP响应,而只返回部分HTTP响应,它必须由JS在HTML DOM树中更新。
您基本上有两种选择:
按ajax="false"
属性禁用ajax。然后它将触发正常的HTTP请求。
按update="clientid"
属性更新(重新呈现)部分内容(在同一页面上!)。您可以使用rendered
属性来控制内容的呈现。
如果两者都不起作用,那么问题就在于其他地方。由于h:commandLink
的工作原理和p:commandLink
的操作方法也会被执行,因此它只能意味着您在尝试ajax="false"
时没有运行您认为正在运行的代码。验证,保存,重建,重新部署,重新启动。
答案 1 :(得分:4)
PrimeFaces不支持基于前向的导航,如果您想在ajax请求中导航或将ajax设置为false,则需要使用重定向而不是前向,如BalusC所说。