次のJavaコードの式の値が顔コンテキストから任意のオブジェクトまたは変数にアクセスすることができます取得:は、プログラムのFaceletsパラメータ(変数)
ELContext elCtx = facesContext.getELContext();
ExpressionFactory exprFac = facesContext.getApplication().getExpressionFactory();
MyProperty myProperty = (MyProperty) exprFac.createValueExpression(elCtx, "#{somebean.someattr.someproperty}", MyProperty.class).getValue(elCtx);
私は文脈から追加の変換パラメータを読み取るために、私のカスタムコンバータ内からコードを使用します。
#{somebean}
がJSFコンテキスト内の通常のバッキングBeanとして定義されている場合、コードは正しく動作します。
Faceletsを使用すると、JSF式に「ショートカット」を作成できます。例:
この場合<ui:param name="shortcut" value="#{somebean.someattr.someproperty}" />
<div>#{somebean.someattr.someproperty} equals #{shortcut}</div>
#{somebean.someattr.someproperty}
と#{shortcut}
の両方が同じ値を有します。
しかし、これらの「ショートカット」名は上記のJavaコードを使用してアクセスすることはできません。たとえば、次のように
MyProperty myProperty1 = (MyProperty) exprFac.createValueExpression(elCtx, "#{somebean.someattr.someproperty}", MyProperty.class).getValue(elCtx);
// myProperty1 has expected value
MyProperty myProperty2 = (MyProperty) exprFac.createValueExpression(elCtx, "#{shortcut}", MyProperty.class).getValue(elCtx);
// myProperty2 is null
現在のJSFページに定義されたフェイスレットコンテキストと「ショートカット」パラメータ値を読むことを、アクセスする方法はありますか?
ありがとうございました!残念ながら、それはJSF 2.0でのみ動作するようです。メソッド 'getAttributes()'は私のプロジェクトでは使用できません。最新のJSFバージョンにアップグレードする必要があります。 [Javadocも参照](http://docs.oracle.com/javaee/6/api/javax/faces/context/FacesContext.html#getAttributes()) – DRCB