今朝私はinputTextコンポーネントで複数のコンバーターを使用しようとする理由があり、これが動作しないことに気付きました。複数のコンバーターが単一のバリューホルダーで使用できないのはなぜですか?
JSFでValueHolderごとに1つのコンバーターしか使用できないのは誰ですか?一連のコンバーターを使用すると、いくつかの状況でエレガントになると思われます。 JSFで
今朝私はinputTextコンポーネントで複数のコンバーターを使用しようとする理由があり、これが動作しないことに気付きました。複数のコンバーターが単一のバリューホルダーで使用できないのはなぜですか?
JSFでValueHolderごとに1つのコンバーターしか使用できないのは誰ですか?一連のコンバーターを使用すると、いくつかの状況でエレガントになると思われます。 JSFで
は、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;
}
// ...
}
実は、私はこの問題を参照してください - 私は値を操作しますが、変換入力していなかったのコンバータの連鎖を考えていました。 converter1が型を変更すると、converter2はもはやStringを扱わないため、連鎖は機能しません。 –