我正在尝试使用primeface 5.2,wildfly,Mojarra 2.2.6实用地创建数据表列
我继承了DataTable,并创建了自己的Columns,我想使用值表达式设置sortBy,filterBy属性,使用下面的代码
public void AddCoulumn(String colName, String dbFieldName,
boolean Searchable) {
ValueExpression valExpr = null;
Column column = new Column();
valExpr = createValueExpression("#{obj." + dbFieldName + "}");
column.setValueExpression("filterBy", valExpr);
column.setValueExpression("sortBy", valExpr);
column.setWidth("100px");
column.setHeaderText(colName);
HtmlOutputText out = new HtmlOutputText();
out.setValueExpression("value", valExpr);
out.setStyle("color:red");
column.setField(dbFieldName);
this.getChildren().add(column);
}
不幸的是,当尝试过滤结果时没有发生任何事情,并且尝试使用任何列进行排序时我得到了此异常
引起:java.lang.NullPointerException at org.primefaces.component.datatable.DataTable.findColumnInGroup(DataTable.java:905)[primefaces-5.2.jar:5.2] 在org.primefaces.component.datatable.DataTable.findColumn(DataTable.java:896)[primefaces-5.2.jar:5.2] at org.primefaces.component.datatable.feature.SortFeature.decode(SortFeature.java:86)[primefaces-5.2.jar:5.2] at org.primefaces.component.datatable.DataTableRenderer.decode(DataTableRenderer.java:62)[primefaces-5.2.jar:5.2] 在javax.faces.component.UIComponentBase.decode(UIComponentBase.java:831)[jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
提前致谢
答案 0 :(得分:2)
我在调试PrimeFaces数据表后解决了这个问题。
我发现如果您尝试使用特定列进行排序或过滤
datatable调用一个findcolumn函数,它将字符串客户端id作为参数:true
。在这个函数中,一个名为findcolumn(string client id)
的函数检索表列...如果在列表中找到客户端ID,则返回列,但在这种情况下,它永远不会找到列,因为PrimeFaces / JSF更改了列的id自整个视图恢复后回发。因此,将不再找到该列
要解决此问题,请显式设置列ID
getcolumns()
现在工作正常