2011-07-05 7 views
4

だが、私はこの要求を持っているとしましょうsetB(String b)が2回呼び出されると思ったので、項目をに追加できますが最初の値(par1)で1回だけ呼び出されました。JSF管理対象Beanに同じキーで複数のパラメータを取得する方法

また、bをList<String>に変換しようとしましたが、JSFはListと評価されていません。

私の質問は、同じキーで複数のパラメータ値を入力する方法です。@ManagedPropertyを使用してください。 (現在は手動でparamterValuesを手に入れています)

答えて

5

あなたの質問はちょっと混乱しています。 <f:viewParam>@ManagedPropertyの両方を使用しています。 Usually you use the one or the other

@ManagedPropertyこれはかなり簡単です。 #{param.b}の代わりに#{paramValues.b}が必要です。これは、と同じカバーの下にあり、指定された名前のすべてのパラメータ値を持つString[]を返します。

@ManagedProperty("#{paramValues.b}") 
private String[] b; 

<f:viewParam>と表示されません。私はこれが単にサポートされていないという印象を持っています。しかし、私はあなたがそれをまったく必要としないという印象も持っています。


更新UIViewParameterのソース(クロサギ科2.1.1、ライン218及び上)にクロールし、私はこの質問に戻って考えながら、私はdecode()方法で、次のコメントに遭遇しcoincidendeによって:

// QUESTION can we move forward and support an array? no different than UISelectMany; perhaps need to know 
// if the value expression is single or multi-valued 
// ANSWER: I'd rather not right now. 
String paramValue = context.getExternalContext().getRequestParameterMap().get(getName()); 

したがって、「設計通り」は、<f:viewParam>ではサポートされていません。

+0

本当に、ここでは '@ManagedProperty'だけが必要な場合があります。 @ ManagedProperty'のjavadocは次のように言っています:_このアノテーションが存在する場合は、 '' {{paramValues} '' ManagedBeanアノテーションを持たないクラスで、実装はこのアノテーションに対して何もしなくてはなりません._? – bluefoot

+0

私はCDIを詳しく見ていません。 – BalusC

+0

これは実装に依存します。 @Inject @Named( "#{param.a}") 'のようなものは動作しません。とにかく、これはこの質問の範囲ではありません。 – bluefoot

関連する問題