Primefaces autoUpdate 只工作一次

tga*_*lei 0 jsf primefaces

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

为此,我使用了autoUpdatePrimefaces的功能。

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

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

余额页面.xhtml

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

    <h:outputText value="#{balanceController.details}"/>
</p:tab>
Run Code Online (Sandbox Code Playgroud)

平衡控制器.java

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

tan*_*hko 6

通常 ap:tab是不可更新的,因为渲染 的p:tab是父组件。可能是p:accordionPanelp:tabView

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

注意:您可能需要向 id 添加一个 id,h:outputText因为只有渲染的组件id是可更新的,并且在没有显式设置属性时h:outputText跳过渲染。idid

也可以通过将其包装为 a 来解决它p:outputPanel

<p:tab title="Further details" rendered="#{balanceController.showDetails()}">
    <p:outputPanel>
       <p:autoUpdate/>
       #{balanceController.details}
    </p:outputPanel>
</p:tab>
Run Code Online (Sandbox Code Playgroud)

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