簡體   English   中英

JSF + primefaces多次調用getter方法

[英]JSF + primefaces calling getter way too much times

我在SO上閱讀了有關此主題的所有答案(不僅如此),但是這些都不能解決我的問題。 我有數據表:

<p:dataTable 
                value="#{reportBean.reportData.rows}"
                var="row" 
                styleClass="listBlock dataTableOverflowAuto fullScreenTable"
                rendered="#{!reportBean.reportData.grouped}">
                 <f:facet name="header">
                    #{msg['report.table.header']}
                </f:facet>

                <p:column>
                    #{row.integrationName}
                </p:column>

                <p:column>
                    #{row.integrationId}
                </p:column>

                <p:column>
                    #{row.service}
                </p:column>

                <p:columns value="#{reportBean.reportData.columns}"
                           var="column">  
                    <f:facet name="header">  
                        #{column}
                    </f:facet>  
                    <h:outputText value="#{row.getData(column)}" escape="false" />  
                </p:columns>

reportBean上的getReportData()非常簡單(無需計算):

public ReportDataInterface getReportData() {
        return reportData;
}

返回的數據是:

public class NoneGroupedReportData implements ReportDataInterface {
    private int counter = 0;
    Logger logger = LoggerFactory.getLogger(getClass());
    private List<String> columns = new LinkedList<String>();
    public void addRow(Row row) {
        addColumns(row);
    }

    public List<String> getColumns() {
        counter++;
        logger.debug("getColumns called {} times", counter);
        return columns;
    }

....

結果是

2013-05-15 07:38:07,405()調試NoneGroupedReportData-調用21600次的getColumns

對於具有約30行和10列的dataTable。

我知道為什么JSF會多次調用getter,但是幾乎是22k,為什么? 當我需要更多結果(> 1000)時,它將不會在5分鍾內呈現,因為它不斷地調用此getter。 問題出在哪里,如何達到每行最多5到10次調用getColumns()的狀態?

我嘗試使用jstl c:set“ caching”,但沒有任何結果( http://qussay.com/2013/04/19/caching-and-reusing-an-evaluated-el-expression-in-jsf/

編輯:我的猜測是,getter調用不是“錯誤”,而是表明我以錯誤的方式使用了dataTable。

問題是您要訪問兩次相同的數據結構,

N: <p:dataTable value="#{reportBean.reportData.rows}" ...

然后里面的相同號碼:dataTable的您正在使用

M: <p:columns value="#{reportBean.reportData.columns}" ...

這會導致N * M產品的末尾給出21600次,因為您正在兩個嵌套標簽中訪問相同的數據結構...

目前尚不清楚您要構建哪種數據表,但是我認為您應該重新組織數據結構。

如果您試圖將多個值放在每一行的單個列中,則較簡單的解決方案會將M更改為:

M: <p:columns value="#{rows.columns}" ...

但這將涉及更改數據結構,以將組件放入組件中。

問候,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM