[Seasar-user:8571] Re: [Teeda]出力時のフォーマットの指定方法について
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2007年 6月 21日 (木) 23:00:28 JST
小林 (koichik) です.
Date: 21 Jun 2007 21:52:22 +0900
From: 山下 真里 <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:8568] [Teeda]出力時のフォーマットの指定方法について
> 1.私が思ったのは、S2Dxoから相互変換をする際に指定したフォーマットで
> 変換する方法があるのか?
あります.
S2Dxo のドキュメント「独自のコンバータ」に
記述するつもりなのですが,いつまでたっても
「工事中」のままでご迷惑おかけしてます.m(__)m
S2Dxo では独自のコンバータを作成して
変換先のプロパティごとに指定することができます.
S2Dxo 用のコンバータは
org.seasar.extension.dxo.converter.Converter
を実装したクラスとして作成します.
例えば
public class NumberFormatDxoConverter implements Converter {
private String format;
public NumberFormatConverter() {
}
public void setFormat(String format) {
this.format = format
}
public Class[] getSourceClasses() {
return new Class[] {Number.class}; //変換元として受け入れ可能なクラス
}
public Class getDestClass() {
return String.class; //変換先のクラス
}
public Object convert(Object source, Class destClass, ConversionContext context) {
DecimalFormat formatter = new DecimalFormat(format);
return formatter.format(((Number) source).longValue()); //固有の変換処理
}
public void convert(Object source, Object dest, ConversionContext context) {
throw new UnsupportedOperationException();
}
}
のようなコンバータを作成します.
クラス名の最後は必ず DxoConverter にしてください.
パッケージは <ルートパッケージ>.converter です.
Teeda のパッケージと同じになるのが気になる場合は
ルートパッケージを別にしてください.
このコンバータを指定するためのアノテーションを作成します.
# 定数アノテーションのみ使うなら不要.
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@DxoConverter("numberFormatDxoConverter")
public @interface NumberFormatDxoConverter {
String format() default "#,##9";
}
@DxoConverter はメタアノテーションで,
コンバータのコンポーネント名を指定します.
# ちょっと冗長ですね.省略時はアノテーションの
# クラス名からとるようにすればよかったかも.
そして変換先 JavaBeans (Page クラス) の
プロパティの setter メソッドに
public class FooPage {
@NumberFormatDxoConverter
public void setSomeNumber(String formattedNumber) {
...
}
}
のように指定することで,数値をフォーマットした
文字列に変換することができます.
定数アノテーションの場合は
public static final String someNumber_numberFormatDxoConverter = "format='#,##9'";
のようになります.
いずれもメーラで書いただけで試していません.m(__)m
概ねこんな感じでいけると思います.
--
<signature>
<name>Koichi Kobayashi</name>
<e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>
Seasar-user メーリングリストの案内