当我将accordionPanel(动态标签)与dataTable结合使用时,我得到了一个非常奇怪的行为。在我的项目中,动态标签的总量可以变得非常大(> 1000)所以我真的需要动态加载accordionPanel,否则它太慢了。
不是仅为当前选定的选项卡加载数据表,而是从列表变量加载元素的getter方法被调用为动态选项卡总数的6倍。因此,如果我有300个动态选项卡,则getter方法被调用1800次。但是,如果我不使用dataTable,只是输出文本,那么getter方法只会被调用一次。
这是一个产生不良行为的小工作示例:
<p:accordionPanel id="datasetHistoryAccordionTab" value="#{Bean.orderDatasets}" var="dataset" dynamic="true">
<p:tab title="Dataset ##{dataset.id}">
<p:tabView>
<p:tab title="All Processes">
<p:dataTable value="#{Bean.datasetProgressHistoryAll}" />
<!-- <h:outputText value="#{Bean.datasetProgressHistoryAll}" /> -->
</p:tab>
</p:tabView>
</p:tab>
</p:accordionPanel>
@ManagedBean
@ViewScoped
public class Bean implements Serializable
{
private List<DatasetBE> orderDatasets = new ArrayList<DatasetBE>(300);
private List<DatasetHistoryBE> datasetHistoryAll = new ArrayList<DatasetHistoryBE>();
public List<DatasetBE> getOrderDatasets() {
return orderDatasets;
}
public void setOrderDatasets(List<DatasetBE> orderDatasets) {
this.orderDatasets = orderDatasets;
}
public List<DatasetHistoryBE> getDatasetHistoryAll() {
log.debug("getDatasetHistoryAll() called...");
return datasetHistoryAll;
}
public void setDatasetProgressHistoryAll(List<DatasetHistoryBE> datasetHistoryAll) {
this.datasetHistoryAll = datasetHistoryAll;
}
}
初始状态还可以,但是一旦我换到另一个标签,就会像疯了一样调用getter方法......
这是PrimeFaces中的错误还是我做错了什么?在我的项目中,我仍然使用PF 3.5,但出于测试目的,我也尝试过PF 4.0,但同样的奇怪行为适用...任何帮助都将不胜感激!