Primefaces如何在呈现时阻止调用支持bean为false

时间:2016-11-05 08:21:51

标签: primefaces jsf-2

我们正在使用Primefaces 5.3 atm。有几页我们希望用户在显示页面内容之前先验证他们的信息(例如,重新输入他们的密码)。因此,我们首先显示确认对话框,并将页面内容的呈现属性设置为false。在用户单击对话框上的确认按钮后,我们隐藏对话框,将渲染值更改为true并更新页面,以便显示页面内容。

但即使render属性为false,依赖bean仍然会被调用。我们的PostConstruct方法是在我们的用户确认哪个结果出现异常之前执行的(比如尝试显示一个对话框,但由于渲染是假的,javascript PF导致未定义)。

当渲染属性为false时,有没有办法完全阻止支持bean的调用?或者除了使用渲染之外还有其他方法吗?

=============================================== ====

更新: 我们尝试使用if else添加内容

<p:outputPanel id="mainPanel">
    <c:if test="#{bean.confirmed eq true}">
        <div id="layout-portlets-cover" class="fontRegular">
            <ui:insert name="content"></ui:insert>
        </div>
    </c:if>
</p:outputPanel>

这种方式在确认为true时没有调用backing bean,但是当我们将value更改为false时,支持bean调用但没有为主内容生成html(空白页面)。 任何人都有任何理想如何解决这个问题?

=============================================== ====

更新2: 看来当我们使用c:if显示页面内容时,postConstruct在pageContent生成之前运行(因为它是通过更新而不是正常加载页面生成的)。所以我们的一些javascript乱了,因为组件不存在但导致异常并停止更新脚本。这就是为什么我们得到空白页。 有没有办法让它像正常一样工作而不是更改代码,将脚本从postConstruct移动到另一个地方?

=============================================== ====

更新3: 如果我们在commandButton中使用update属性,则在确认请求完成时返回页面内容。这样我们就可以为PostConstruct方法返回脚本做好一切准备。但它导致我们的函数使页面属性返回null。

uiComponent.getAttributes().get(key);

如果我们将更新放在另一个remoteCommand中并在确认请求的onComplete上调用它,那么它就像在UPDATE 2中一样。 因此,无论哪种方式都会导致我们当前代码出现一些错误。 无论如何以第一种方式获取页面属性?

0 个答案:

没有答案