Primefaces嵌套的dataTable渲染问题

时间:2011-10-05 12:57:12

标签: java jsf-2 primefaces

我正在使用Primefaces和JSF2.0。 我有一个嵌套的dataTable,我希望只有当一些布尔标志(safeToLoadDataTable)为真时才会呈现,但这不会发生,当我打开页面时,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是否正常。 谢谢!

更新:

我的国旗看起来像这样:

private boolean safeToLoadDataTable;

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


        return safeToLoadDataTable;
    }

无论如何,我已经尝试过返回false并且仍然会渲染面板。

1 个答案:

答案 0 :(得分:1)

  

当我打开页面时,record.columnList会抛出NullPointerException,因为它显然尚未初始化

您不应该在getColumnList()中执行任何其他操作,而不仅仅是返回list属性。吸气剂看起来应该是这样的:

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

它不应包含任何其他代码。这个属性的任何初始化都应该在bean的(post)构造函数或action(listener)方法中完成。


对于具体问题

无关,我建议在EL中使用empty关键字而不是那个笨拙的布尔getter。

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