2011-07-12 6 views
3

今朝私はinputTextコンポーネントで複数のコンバーターを使用しようとする理由があり、これが動作しないことに気付きました。複数のコンバーターが単一のバリューホルダーで使用できないのはなぜですか?

JSFでValueHolderごとに1つのコンバーターしか使用できないのは誰ですか?一連のコンバーターを使用すると、いくつかの状況でエレガントになると思われます。 JSFで

+1

実は、私はこの問題を参照してください - 私は値を操作しますが、変換入力していなかったのコンバータの連鎖を考えていました。 converter1が型を変更すると、converter2はもはやStringを扱わないため、連鎖は機能しません。 –

答えて

10

は、Converterインタフェースは、以下の唯一の目的で設計されている:

コンバータは、間にストリングオブジェクトと文字列からオブジェクトへの変換を実行することができるJavaクラスを記述したインターフェースでありますモデルデータオブジェクト、およびレンダリングに適したオブジェクトのString表現です。

...

getAsObject適用要求は要求処理ライフサイクルの位相値の間に格納されているに適したモデルデータオブジェクトに、指定されたUIComponentに関連付けられている指定された文字列値を変換。 getAsString

は、要求処理lifeycleの応答位相をレンダリング間に生成された応答に含まれるのに適している文字列に、指定されたUIComponentに関連付けられている指定されたモデルオブジェクトの値を、変換します。

javadocもJSF仕様も、チェーンコンバータの可能性については説明していません。

この問題を実装レベルで解決することをお勧めします。既存のコンバーターを拡張したい場合は、それを行うだけで、必要に応じていつでもsuperメソッドを呼び出す必要があります。例えば。

public class SomeExtendedConverter extends SomeBasicConverter { 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String value) { 
     Object basicConvertedValue = super.getAsObject(context, component, value); 

     // ... manipulate more ... 

     return extendedConvertedValue; 
    } 

    // ... 
} 
関連する問題