使用filterBy和sortBy属性以编程方式添加p:列

时间:2015-07-29 17:44:00

标签: jsf jsf-2 primefaces datatable

我正在尝试使用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]

提前致谢

1 个答案:

答案 0 :(得分:2)

我在调试PrimeFaces数据表后解决了这个问题。 我发现如果您尝试使用特定列进行排序或过滤 datatable调用一个findcolumn函数,它将字符串客户端id作为参数:true。在这个函数中,一个名为findcolumn(string client id)的函数检索表列...如果在列表中找到客户端ID,则返回列,但在这种情况下,它永远不会找到列,因为PrimeFaces / JSF更改了列的id自整个视图恢复后回发。因此,将不再找到该列

要解决此问题,请显式设置列ID

getcolumns()

现在工作正常