我的页面上有不同的计算,这些计算是由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!";
}
}
答案 0 :(得分:6)
通常,p:tab
是不可更新的,因为呈现p:tab
的那个是父组件。可能是p:accordionPanel
或p:tabView
。
因此,您可以将p:autoUpdate
移动到父组件,也可以将其移动到h:outputText
内。
注意:您可能需要向h:outputText
添加一个ID,因为只有具有渲染的id
的组件才是可更新的,而h:outputText
会在没有{{1 }}属性已明确设置。
也可以通过将其包装id
来解决它:
id
我出于性能原因删除了p:outputPanel
。 IMO不应将<p:tab title="Further details" rendered="#{balanceController.showDetails()}">
<p:outputPanel>
<p:autoUpdate/>
#{balanceController.details}
</p:outputPanel>
</p:tab>
用于简单文本(h:outputText
未设置为h:outputText
),因为这会在服务器端创建escape
,这不是必需的。>