Я прочитал все ответы на эту тему (не только) на SO, но ничто из этого не решает мою проблему. У меня есть DataTable:JSF + прайсы, вызывающие getter way too much times
<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>
getReportData() на reportBean не очень просто (без расчета):
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 0 7: 38: 07405() ОТЛАДКА NoneGroupedReportData - getColumns называемые 21600 раз
Для Datatable с ~ 30 строк и 10 столбцов.
Я знаю, почему JSF вызывает геттеры много раз, но почти 22k, почему? Когда мне нужно больше результатов (> 1000), он не будет отображаться через 5 минут, потому что он бесконечно называет этот геттер. Где проблема и как я могу достичь состояния, в котором getColumns() вызывается для каждой строки max 5 ~ 10 раз?
Я попытался с помощью JSTL C: установить «кэширование», но без какого-либо результата (http://qussay.com/2013/04/19/caching-and-reusing-an-evaluated-el-expression-in-jsf/)
EDIT: Я думаю, что добытчик звонки не «неправильно», но признак того, что я использую DataTable в неправильном направлении ,
Вы не дадите полную информацию здесь. Где находится экземпляр «NoneGroupedReportData»? – kolossus
Это вид области. И экземпляр NoneGroupedReportData является свойством управляемого компонента. – DominikM
Вы отсылаете reportData не менее 3 раз, и они могут быть ненужными. не требуется, чтобы выборки строк и столбцов были отдельно. – erencan