以编程方式将sortBy属性添加到primefaces DataTable列

时间:2012-04-10 13:11:04

标签: jsf datatable primefaces

我正在尝试以编程方式将sortBy属性放入primefaces数据表Column。我继承了DataTable,并使用自定义getColumns()调用创建了自己的列。

不幸的是,似乎没有将sortBy属性插入列的干净方法,因为该方法还不知道它所在的上下文。

public List<Column> getColumns() {
    if (columns == null) {
        columns = new ArrayList<Column>();
        String[] columnStrings = getShowColumns().split(",");
        for (String columnString : columnStrings) {
            Column column = getColumnByType(columnString.trim());
            if (column != null) {
                //here I have to add the sortBy Expression somehow,
                //but there is no context to construct it from
                //column.setSortBy(ValueExpression)
                columns.add(column);
            }
        }
    }
    return columns;
}

我觉得很明显,我错过了一些东西,但我现在失去了。 Column似乎在其他地方填充了ValueExpression,但我无法找到...

我尝试使用调试器完成所有代码,但我无法弄清楚在原始实现中何时生成ValueExpression。任何提示都赞赏。

1 个答案:

答案 0 :(得分:4)

如果列未指定ValueExpression,则sortBy的{​​{1}}不存储在任何位置,这是您的情况。您必须为每个应该可排序的列创建自己的sortBy

我假设您知道列类型和值,因此您可以尝试:

ValueExpression

否则,如果您不知道类型和值:

Column column = getColumnByType(columnString.trim());
FacesContext facesContext = FacesContext.getCurrentInstance();
ELContext elContext = facesContext.getELContext();
ExpressionFactory elFactory = facesContext.getApplication().getExpressionFactory();
ValueExpression valueExpresion = elFactory.createValueExpression(elContext, column.getValue(), column.getType());

现在你可以设置sortBy:

 String valueExprs = "#{data.street}"; // for example
    ...
    Column column = getColumnByType(columnString.trim());
    ...
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ELContext elContext = facesContext.getELContext();
    ExpressionFactory elFactory = facesContext.getApplication().getExpressionFactory();
    ValueExpression valueExpression = elFactory.createValueExpression( elContext, valueExprs, String.class);

请注意使用column.setValueExpression("sortBy", valueExpression); 代替column.setValueExpression - 它可以减少麻烦并且可以在大部分时间内完成工作。

希望它有所帮助!