1

パラメータを使用して一部のプロパティにアクセスしようとすると、いくつかの問題が発生します。アクセサーにはパラメーターがあるため、プロパティと呼ぶべきかどうかはわかりませんが、とりあえずプロパティと呼びましょう。

状況は次のとおりです。

マップ内のオブジェクトとしてさまざまなローカリゼーションを含む Student クラスがあります。これを行うことで、これらのローカリゼーション オブジェクトを取得できます。

student.getLocalizedData(String localizationCode);

今、ページで、私はこれをやろうとしています:

<h:inputText value="#{collegeBean.student.getLocalizedData('es').profileDescription}"/>

学生の説明には、多くのローカリゼーションを含めることができます。

ページは正しく読み込まれますが、学生を保存しようとすると、Bean の collegeBean にプロパティ getLocalizedData がなく、Bean に含まれる学生のプロパティであることがわかります。

私はその行が非常識であることを知っているので、それをラップしようとしました:

<h:inputText value="#{collegeBean.getStudentLocalizedData('es').profileDescription}"/>

悲しいかな、もう一度同じメッセージが表示されます。

私が見つけた唯一の解決策は、studen't sproperty を完全にラップするメソッドを作成することです...しかし、ローカリゼーションごとに 2 つのメソッド (get + set) が残り、それは 1 つのプロパティのみです。これは、(2 x ローカライゼーション x 属性) の量のメソッドを持つことをやめるということです!.

これを最も動的な方法で解決するために私が取ることができるアプローチはありますか? ローカリゼーションの量は将来変更される可能性があり、コードを変更したくありません。

編集: JBoss 6.1.0.Final とそれに付属する JSF 実装 JSF 2.0.3-b05 を使用しています

4

2 に答える 2

2

これは理論的には機能するはずなので、使用されているEL実装のバグまたは見落としが疑われます。別のEL実装(別のサーバーメーカー)を試すか、サーバーをアップグレードすることをお勧めします。無駄な場合は、バグとしてサーバーベンダーに報告してください。

ただし、実際にはをに委任しているので、それgetLocalizedData()Map行わずに、代わりに全体Mapを直接返すことをお勧めします。

public Map<String, LocalizedData> getLocalizedData() {
    return localizedData;
}

次のように使用できるように

<h:inputText value="#{collegeBean.student.localizedData.es.profileDescription}"/>

または、必要に応じて

<h:inputText value="#{collegeBean.student.localizedData['es'].profileDescription}"/>
于 2012-05-15T20:09:35.860 に答える
1

私の経験では、パラメーターを受け入れるほとんどの EL 実装には何らかのバグがあります。私が最も満足しているのは、Tomcat 7 の EL です。

Mojarra および MyFaces でカスタム EL 実装を使用できることに注意してください。私は通常、Tomcat のものを自分のアプリケーションにバンドルしているので、安定した機能セットが利用できることを信頼できます。ただし、すべてを正しく構成しないと、クラスローダーの問題が発生する可能性があるため、注意が必要です。

モハラ:

<context-param>
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>YOUR EL IMPLEMENTATION EXPRESSION FACTORY</param-value>
</context-param>

MyFaces:

<context-param>
    <param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
    <param-value>YOUR EL IMPLEMENTATION EXPRESSION FACTORY</param-value>
</context-param>
于 2012-05-15T20:23:26.337 に答える