2008年9月24日水曜日

Converter(JSF/Teeda)は連鎖できない

スズキです。

試した限り、表記のようです。つまり、

--------
@Converter1
@Converter2
public String getComment() {
  ...
}
--------

としても、Converter1だけきいて、Converter2はききません。
Validatorみたいに連鎖してきいてくれたらいいのになー
と思いながら、仕方ないので、汎用なConverterを
共通ライブラリとして用意し、プロジェクトでは必要に応じて、
共通ライブラリのConverterを利用したConverterを
作る作戦にしました。

こんな感じです。

--------
public class MobileTextConverter extends OutputConverter {
  // 使用する共通ライブラリのコンバーターをDI
  @Binding
  public TranslitartorConverterImpl translitartorConverter;
  @Binding
  public TagRemoveConverterImpl tagRemoveConverter;
  // アノテーションからもらうパラメータ
  public String[] acceptTags;
  public String id;
  @Override
  public String getAsString(FacesContext context, UIComponent
component, Object value)
      throws ConverterException {
    String result = null;
    this.translitartorConverter.id = this.id;
    // 実は全角カタカナを半角カタカナにしています
    result = this.translitartorConverter.getAsString(context, component, value);
    this.tagRemoveConverter.acceptTags = this.acceptTags;
    // 実はbr以外のタグを除去しています
    result = this.tagRemoveConverter.getAsString(context, component, result);
    return result.replace("<BR/>", "<br/>");
  }
}
--------

前後関係すっ飛ばしてるので、まったく参考にならないソースですが、
何が言いたかったかというと、専用コンバーターつくって、その中で
汎用的なConverterをDIして使うのがいいんじゃないか?
ってことです。

もう時間無いから、今回はこれでいきましょう...

--
http://suz-lab.blogspot.com/

0 コメント: