Проблемы с рендерингом вложенных данных DataTable - PullRequest
0 голосов
/ 05 октября 2011

Я использую Primefaces с JSF2.0. У меня есть вложенный dataTable, который я хочу отобразить, только если какой-то логический флаг (safeToLoadDataTable) имеет значение true, но этого не происходит, и когда я открываю страницу, record.columnList создает исключение NullPointerException, поскольку, очевидно, он еще не инициализирован. Я заполняю эти списки после того, как кнопка поиска на той же странице нажата.

Мой код:

<p:panel rendered="#{enastrSearch.safeToLoadDataTable}">
                <p:dataTable id="tableData" var="record" value="#{enastrSearch.recordsList}" >
                    <p:column>
                        <p:dataTable var="column" value="#{record.columnList}">
                            <p:column>
                                <f:facet name="header">
                                    Name
                                </f:facet>
                                <h:outputText value="#{column.columnName}" />
                            </p:column>

                            <p:column>
                                <f:facet name="header">
                                    Value
                                </f:facet>
                                <h:outputText value="#{column.columnValue}" />
                            </p:column>
                        </p:dataTable>
                    </p:column>
                </p:dataTable>
            </p:panel>

Почему не работает визуализированный атрибут? И мне также было интересно, если использование вложенных dataTable нормально. Спасибо!

UPDATE:

Мой флаг выглядит так:

private boolean safeToLoadDataTable;

    public boolean isSafeToLoadDataTable() {
        if(recordsList!=null && !recordsList.isEmpty()){
            safeToLoadDataTable = true;
        }else{
            safeToLoadDataTable = false;
        }


        return safeToLoadDataTable;
    }

Во всяком случае, я пытался даже с возвращением false, и все равно панель отображается.

1 Ответ

1 голос
/ 05 октября 2011

при открытии страницы record.columnList выдает исключение NullPointerException, поскольку, очевидно, оно еще не инициализировано

Вы не должны делать в getColumnList() ничего, кроме простого возврата свойства списка. Геттер должен выглядеть именно так:

public List<Column> getColumnList() {
    return columnList;
}

Он не должен содержать какой-либо другой код. Любая инициализация этого свойства должна быть выполнена в конструкторе (post) компонента или в методе action (listener).


Не связанный с конкретной проблемой, я бы предложил просто использовать ключевое слово empty в EL вместо этого неуклюжего логического метода получения.

<p:panel rendered="#{not empty enastrSearch.recordsList}">
...