あなたの質問はちょっと混乱しています。 <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>
ではサポートされていません。
本当に、ここでは '@ManagedProperty'だけが必要な場合があります。 @ ManagedProperty'のjavadocは次のように言っています:_このアノテーションが存在する場合は、 '' {{paramValues} '' ManagedBeanアノテーションを持たないクラスで、実装はこのアノテーションに対して何もしなくてはなりません._? – bluefoot
私はCDIを詳しく見ていません。 – BalusC
これは実装に依存します。 @Inject @Named( "#{param.a}") 'のようなものは動作しません。とにかく、これはこの質問の範囲ではありません。 – bluefoot