与accordionPanel结合使用时的奇怪dataTable行为

时间:2014-03-03 15:00:54

标签: primefaces datatable accordionpane

当我将accordionPanel(动态标签)与dataTable结合使用时,我得到了一个非常奇怪的行为。在我的项目中,动态标签的总量可以变得非常大(> 1000)所以我真的需要动态加载accordionPanel,否则它太慢了。

问题

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

这是一个产生不良行为的小工作示例:

XHTML

<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,但同样的奇怪行为适用...任何帮助都将不胜感激!

0 个答案:

没有答案