我正在使用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并且仍然会渲染面板。
答案 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}">