Primefaces自动更新只能工作一次



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

为此,我使用Primefaces的autoUpdate特性。

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

<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的组件是可更新的,并且当没有显式设置id属性时,h:outputText会跳过渲染id

也可以通过将其封装为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

相关内容

  • 没有找到相关文章

最新更新