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



我正在尝试创建实用的数据表列,使用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);

现在运行正常

相关内容

  • 没有找到相关文章

最新更新