Primefaces 与accordionPanel组合时的怪异数据表行为

Primefaces 与accordionPanel组合时的怪异数据表行为,primefaces,datatable,accordionpane,Primefaces,Datatable,Accordionpane,当我将accordionPanel(动态选项卡)与dataTable组合在一起时,会出现一种非常奇怪的行为。在我的项目中,动态选项卡的总量可能会非常大(>1000),因此我确实需要动态加载accordionPanel,否则速度会太慢 问题 从列表变量加载元素的getter方法被调用的次数是动态选项卡总数的6倍,而不是仅为当前选定的选项卡加载datatable。因此,如果我有300个动态选项卡,getter方法调用1800次。但是,如果我不使用dataTable,而只是输出文本,那么getter方

当我将accordionPanel(动态选项卡)与dataTable组合在一起时,会出现一种非常奇怪的行为。在我的项目中,动态选项卡的总量可能会非常大(>1000),因此我确实需要动态加载accordionPanel,否则速度会太慢

问题 从列表变量加载元素的getter方法被调用的次数是动态选项卡总数的6倍,而不是仅为当前选定的选项卡加载datatable。因此,如果我有300个动态选项卡,getter方法调用1800次。但是,如果我不使用dataTable,而只是输出文本,那么getter方法只会像应该的那样被调用一次

下面是一个小的工作示例,它会产生不需要的行为:

xhtml

@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;
    }
}