使用 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);
现在可以正常使用了
我正在尝试实用地创建数据表列,使用 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);
现在可以正常使用了