【问题标题】:p:commandLink won't redirect to new page?p:commandLink 不会重定向到新页面?
【发布时间】:2018-10-11 16:39:57
【问题描述】:

我正在使用 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"/>

任何想法我做错了什么?

【问题讨论】:

    标签: jsf primefaces glassfish


    【解决方案1】:

    默认情况下,Primefaces 的 p:commandLink 会触发一个 ajax 请求。它不会返回完整的 HTTP 响应,而只是返回部分 HTTP 响应,该响应必须由 JS 在 HTML DOM 树中更新。

    你基本上有两种选择:

    1. 通过ajax="false" 属性禁用ajax。然后它会触发一个正常的 HTTP 请求。

    2. 通过update="clientid" 属性更新(重新渲染)部分内容(在同一页面上!)。您可以使用rendered 属性来控制内容的呈现。

    如果两者都不起作用,那么问题出在其他地方。由于h:commandLink 有效并且p:commandLink 的操作方法也被执行,那么它只能意味着您在尝试ajax="false" 时没有运行您认为正在运行的代码。验证、保存、重建、重新部署、重启。

    【讨论】:

      【解决方案2】:

      PrimeFaces 不支持基于前向的导航,如果您想在 ajax 请求中导航或将 ajax 设置为 false,如 BalusC 所说,您需要使用重定向而不是前向。

      【讨论】:

        猜你喜欢
        • 2015-09-06
        • 2017-10-26
        • 2019-03-09
        • 1970-01-01
        • 2021-04-05
        • 2010-11-08
        • 1970-01-01
        • 2021-10-22
        • 1970-01-01
        相关资源
        最近更新 更多