[Seasar-user:3728] Re: [S2JSF] java.sql.Timestampのプロパティの扱いについて

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2006年 6月 1日 (木) 02:08:09 JST


米林です。

From: "Hirotaka HONMA" <[E-MAIL ADDRESS DELETED]>
Sent: Thursday, June 01, 2006 1:40 AM

> 本間です。
>
> on Thu, 01 Jun 2006 01:18:53 +0900
> [E-MAIL ADDRESS DELETED] wrote:
>
> > > DTOクラスには、Timestamp型のプロパティがあって、それをコンバータを使って
> > > ブラウザ上で文字列として表示することはできていますが、逆にブラウザ上の入
> > > 力値をTimestamp型のプロパティに更新することができていません。
> > >
> > > 以下のように、フォームから送信ボタンを押すと例外が発生してしまいます。
> > > (hogehoge.createDateはTimestamp型です。)
> > > なんとか、Timestamp型のプロパティに値を設定したのですが、解決方法をご存
> > > じの方いらっしゃいますでしょうか?
>
> > 冗談はさておき、MyFacesのValueBindingImpl内での例外で
> > そちらには手を出せませんので、やるとするのであれば
> > DTO(hogehoge)内で変換するのはいかがでしょう?
>
> もしくは、Timestamp型を扱うconverterを作成して、
> faces-config.xmlのconverter-for-classで登録する方法もありま
> すね。
>
> 実装イメージは、DateTimeConverterを継承してTimestampConverter
> を作り、getAsObjectをオーバーライドして、
>
>   return new java.sql.Timestamp(((Date)super.getAsObject(...)).getTime());
>
> という感じで実現できそうな気がします。

そうですね、独自のコンバータでもいけますね。
試したところOKのようです。
# こちらの方が、DTOの変更が無いので良いですね(^^

参考までに以下の通りです。

1.独自のコンバータ作成
2.dicon登録
3.m:converterで指定

1.独自コンバータ作成
---------------------------------------------
package examples.jsf.converter;

import java.sql.Timestamp;
import java.util.Date;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.DateTimeConverter;

public class TimestampConverter extends DateTimeConverter {
    public Object getAsObject(FacesContext context, UIComponent component,
            String value) {
        return new Timestamp(((Date) super.getAsObject(context, component,
                value)).getTime());
    }
}
---------------------------------------------
2.dicon登録
<component name="timestampConverter"
class="examples.jsf.converter.TimestampConverter">
 <property name="pattern">"yyyy/MM/dd hh:mm:ss"</property>
</component>

3.m:converterで指定
m:converter="#{timestampConverter}"




Seasar-user メーリングリストの案内