2012-04-10 10 views
1

sortBy属性をプライムフェイスデータテーブルColumnにプログラム的に入れようとしています。私はDataTableから継承し、カスタムgetColumns()呼び出しを使用して独自の列を作成しています。sortBy属性をプライマリにプログラムで追加するDataTable Column

は、残念ながら、この方法は、まだそれがであるコンテキストを知らないため、列にSORTBY属性を挿入するには、noクリーンな方法はなさそうです。

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

それは私には明白なようで、そのI何かが見当たりませんが、私はすぐに失われます。私は、デバッガを使用して、すべてのコードを通過しようとしたが、のValueExpressionがあるとき、私は把握することはできませんColumnはどこかそのValueExpressionで満たされているように見えるが、私はどこ...

を見つけることができません元の実装で生成されます。どんなヒントもありがとう。

答えて

4

は、列にsortByが指定されていない場合はどこにも格納されません。ソート可能な各列に独自のValueExpressionを作成する必要があります。

私はあなたがこの試すことができますので、あなたが列の型と値を知っていると仮定

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 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:column.setValueExpression代わりのcolumn.setSortByを使用して

column.setValueExpression("sortBy", valueExpression); 

お知らせ - それが引き起こしますトラブルが少なく、ほとんどの時間で作業できます。

希望しました!

+0

ありがとうございます。私はそれが動作するようにシングルトンの文脈を引き出すことができるかどうかはわかりませんでした。私はまだ文脈が参照によって渡された時そして理由を得ることができませんが、それはまったく別の質問です。再度、感謝します! – devsnd

+0

あなたは大歓迎です。あなたは、豆、phaseListenersなどのjsf関連の "オブジェクト"のコンテキストを引き出すことができます。しかし、むしろ、経験豊かなユーザーやBalusCのようなプロの詳細な回答を得るためには別に質問しなければなりません。 – Fallup

関連する問題