1

sortByプログラムで属性をprimefacesデータテーブルに入れようとしていますColumngetColumns()DataTableから継承し、カスタム呼び出しを使用して独自の列を作成しました。

残念ながら、メソッドはまだコンテキストを認識していないため、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がいつ生成されるかがわかりません。ヒントをいただければ幸いです。

4

1 に答える 1

4

ValueExpressionsortBy列が指定されていない場合、forはどこにも保存されません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());

それ以外の場合、タイプと値がわからない場合:

 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);

そして今、あなたはsortByを設定することができます:

column.setValueExpression("sortBy", valueExpression);

column.setValueExpression代わりに使用することに注意してくださいcolumn.setSortBy。これにより、問題が少なくなり、ほとんどの場合機能します。

お役に立てば幸いです。

于 2012-04-10T16:14:22.627 に答える