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:accordionPanel
或 p: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
,这不是必需的。
我有一个包含不同计算的页面,由 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:accordionPanel
或 p: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
,这不是必需的。