Primefaces 与accordionPanel组合时的怪异数据表行为
当我将accordionPanel(动态选项卡)与dataTable组合在一起时,会出现一种非常奇怪的行为。在我的项目中,动态选项卡的总量可能会非常大(>1000),因此我确实需要动态加载accordionPanel,否则速度会太慢 问题 从列表变量加载元素的getter方法被调用的次数是动态选项卡总数的6倍,而不是仅为当前选定的选项卡加载datatable。因此,如果我有300个动态选项卡,getter方法调用1800次。但是,如果我不使用dataTable,而只是输出文本,那么getter方法只会像应该的那样被调用一次 下面是一个小的工作示例,它会产生不需要的行为: xhtmlPrimefaces 与accordionPanel组合时的怪异数据表行为,primefaces,datatable,accordionpane,Primefaces,Datatable,Accordionpane,当我将accordionPanel(动态选项卡)与dataTable组合在一起时,会出现一种非常奇怪的行为。在我的项目中,动态选项卡的总量可能会非常大(>1000),因此我确实需要动态加载accordionPanel,否则速度会太慢 问题 从列表变量加载元素的getter方法被调用的次数是动态选项卡总数的6倍,而不是仅为当前选定的选项卡加载datatable。因此,如果我有300个动态选项卡,getter方法调用1800次。但是,如果我不使用dataTable,而只是输出文本,那么getter方
豆
@ManagedBean
@视域
公共类Bean实现了可序列化
{
私有列表orderDatasets=新的ArrayList(300);
私有列表datasetHistoryAll=newarraylist();
公共列表getOrderDatasets(){
返回订单数据集;
}
public void setOrderDatasets(列出orderDatasets){
this.orderDatasets=orderDatasets;
}
公共列表getDatasetHistoryAll(){
debug(“getDatasetHistoryAll()调用…”);
返回datasetHistoryAll;
}
public void setDatasetProgressHistoryAll(列出datasetHistoryAll){
this.datasetHistoryAll=datasetHistoryAll;
}
}
初始状态是正常的,但只要我切换到另一个选项卡,getter方法就会被疯狂地调用
这是PrimeFaces中的错误还是我做错了什么?在我的项目中,我仍然使用PF 3.5,但出于测试目的,我也尝试了PF 4.0,但同样奇怪的行为适用于。。。任何帮助都将不胜感激
<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;
}
}