我正在尝试创建实用的数据表列,使用primeface 5.2,wildfly,Mojarra 2.2.6
我从数据表继承,并创建自己的列,我想设置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引起在org.primefaces.component.datatable. datatable. findcolumngroup (DataTable.java:905) [primefaces-5.2.jar:5.2]在org.primefaces.component.datatable.DataTable.findColumn(DataTable.java:896) [primefaces-5.2.jar:5.2](SortFeature.java:86) [primefaces-5.2.jar:5.2][primefaces-5.2.jar:5.2]at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:831) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
thanks in advance
我在调试了PrimeFaces数据表之后修复了这个问题。我发现,如果您尝试使用特定列进行排序或筛选数据表调用findcolumn函数,该函数以字符串客户端id作为参数:findcolumn(string client id)
。在这个函数内部,一个名为getcolumns()
的函数检索表列…如果在列表中找到了客户端id,它将返回该列,但在本例中它从未找到列,因为在恢复整个视图后,PrimeFaces/JSF在回发时更改了列id。因此该列将不再被找到
要解决这个问题,显式地设置列id
column.setId(colName);
现在运行正常