【问题标题】:Primefaces nested dataTable render problemsPrimefaces嵌套dataTable渲染问题
【发布时间】:2011-10-05 12:57:12
【问题描述】:

我正在使用带有 JSF2.0 的 Primefaces。 我有一个嵌套的数据表,只有在某些布尔标志(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>

为什么渲染属性不起作用?而且我还想知道使用嵌套数据表是否可以。 谢谢!

更新:

我的旗帜是这样的:

private boolean safeToLoadDataTable;

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


        return safeToLoadDataTable;
    }

无论如何,我已经尝试过即使返回 false 并且仍然呈现面板。

【问题讨论】:

  • 你的 managedbean 是什么样子的?
  • 那么,当你使用&lt;p:panel rendered="false"&gt;时,面板仍然显示?你用的是什么PF版本?
  • 你试过&lt;p:panel rendered="false"&gt;吗?
  • 不,我没试过...我说的是isSafeToLoadDataTable方法返回。
  • 我还有一个问题:如何仅在一行中显示列表成员?因为如果我使用 dataTable 和 column,会自动生成行,如果我使用 p:row 它不起作用...

标签: java jsf-2 primefaces


【解决方案1】:

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

您不应该在getColumnList() 中做任何其他事情,而不仅仅是返回列表属性。 getter 应该看起来像这样:

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

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


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

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

【讨论】:

  • 我不知道有一个空的EL关键字...谢谢BalusC!我并不想模棱两可,只是我对 JSF、Spring 还很陌生,而且我试图一次做很多事情,有时我有点……忘乎所以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
相关资源
最近更新 更多