使用 filter 和 sortBy 属性以编程方式添加 p:column

Adding p:column programatically with filterBy and sortBy attributes

我正在尝试实用地创建数据表列,使用 primeface 5.2、wildfly、Mojarra 2.2.6

我继承了 DataTable,并创建了自己的列,我想使用值表达式设置 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.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] 在 org.primefaces.component.datatable.feature.SortFeature.decode(SortFeature.java:86) [primefaces-5.2.jar:5.2] 在 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]

提前致谢

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

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

column.setId(colName);

现在可以正常使用了