Primefaces autoUpdate 只工作一次

Primefaces autoUpdate only works once

我有一个包含不同计算的页面,由 ajax 完成。
页面末尾应该有一个提示文本,每次计算后都会更新。

为此,我使用了 Primefaces 的 autoUpdate 功能。

当我最初加载页面时,文本显示正确。同样在第一次计算之后,文本会正确刷新。 但是如果我进一步计算,文本将不再改变,无论哪个值 balanceController.getBalance() returns.
当我调试我的代码时,我看到 balanceController.getDetails() 运行正确,而且 returns 需要的文本。只有我页面上的内容没有刷新。当我手动重新加载页面(使用浏览器)时,会出现正确的文本。

<p:autoUpdate/> 仅在第一次计算期间执行并更新选项卡内容的原因是什么?

balancePage.xhtml

<p:tab title="Further details" rendered="#{balanceController.showDetails()}">
    <p:autoUpdate/>

    <h:outputText value="#{balanceController.details}"/>
</p:tab>

BalanceController.java

public String getDetails() {
    if ( getBalance() >= 0 ) {
        return "Your current balance is: " + Double.toString(getBalance());
    } else {
        return "Your credit has been used up!";
    }
}

一般来说,p:tab 是不可更新的,因为呈现 p:tab 的是父组件。可能是 p:accordionPanelp:tabView.

因此您可以将 p:autoUpdate 移动到父组件或将其移动到 h:outputText.

注意:您可能需要向 h:outputText 添加一个 id,因为只有呈现 id 的组件是可更新的,并且 h:outputText 在没有 id 时跳过呈现 id =18=] 属性已明确设置。

也可以通过包裹一个p:outputPanel:

来解决
<p:tab title="Further details" rendered="#{balanceController.showDetails()}">
    <p:outputPanel>
       <p:autoUpdate/>
       #{balanceController.details}
    </p:outputPanel>
</p:tab>

出于性能原因,我删除了 h:outputText。 IMO 不应将 h:outputText 用于简单文本(escape 未设置为 false),因为这会在服务器端创建一个 UICompoment,这不是必需的。