[Wicket-ja-user 345] Re: Converterに関して質問です。

Back to archive index

古川 烈 r_f_315****@hotma*****
2009年 6月 27日 (土) 12:26:06 JST


古川です、
アドバイスありがとうございます。

正に下記で示された状態です。
>それはTextFieldではなくてLabelのような気がしたんですよね。

ここも迷いのある部分で、

    AbstractReadOnlyModel
    IConverter

どちらを使うべきなのか?という疑問も持っています。
自分の中では

    Model    ->  何処からか値を引きずり出すオブジェクト
    Converter ->  引きずり出された値を表示上の文字列に変換するオブジェクト

なんですが、
「true,false」を「はい、いいえ」と表示するとして、
それがたまたま入力が不可能なLabelであったというだけの話で、
本来何かのオブジェクトを表示上の文字列に変換するものはConverterであるべきではないのか?
と思ってしまうのです。
(じゃあReadOnlyModelをどこで使う?と聞かれると答えれないですけど。。。)

矢野様としては、使い分けを

    LabelならAbstractReadOnlyを使う
   入力が存在するならIConverterを使う

で、統一しているということですか?


日付の例に関しては下記の例の様にしています。
CRM等のシステムの場合、オペレータの操作が慣れてくると、
「テンキーで高速入力したい」要件が出てきて、結局ドロップダウンが煩わしくなってくると思うので。





> From: t_yano****@me*****
> To: wicke****@lists*****
> Date: Sat, 27 Jun 2009 02:23:25 +0900
> Subject: [Wicket-ja-user 344] Re: Converterに関して質問です。
> 
> 矢野です。
> 
> ちょっと確認なんですが、話の流れからすると、それはTextFieldではなくてLabelのような気がしたんですよね。
> もしこれがTextField<Boolean>の話だとすると、その項目はユーザが入力可能で、しかもIConverterによって
> 変換可能な値しか入力できないかなり特殊なTextFieldということになりますよねえ。
> 
> 提供された例からすると、ユーザはブラウザ上でどんな文字でも入力できるわけですが、結局IConverterが
> 変換できるのは「はい」「いいえ」の2種類の文字列だけで、それ以外の文字列はすべて検証段階で変換エラーで
> はじかれてしまう。
> 
> 入力が複数個に限定されるのなら、DropDownChoiceとか使うと思うので、こういうシーンになったことがないんです
> よね。。。
> 
> 
> で考えてみるに、次のようなケースでしょうか。
> 
> 
> あり得る例としては、ModelObjectがTimestampとかjava.sql.Dateとかで、ユーザは20090625みたいな文字列を入力する
> ケースです。
> 
> この場合は、私は独自のSqlDateConverterといったIConverter実装を用意して、さらに、getConverter()を
> オーバーライドしたTextFieldサブクラスとしてSqlDateTextFieldなんかを作ります。
> 
> 一度作ってしまえば、あとはどんなシーンでも、日時を入力するシーンではIConverterを意識することなく、
> 
> 
> add(new SqlDateField(.....));
> 
> 
> で済むからです。毎回匿名サブクラスにするのもめんどくさいですし。カプセル化大事。
> 
> 
> 
> で、なんかの理由でTextFieldのModelObjectがBooleanだとして、そのような入力項目がアプリケーションの中で2回以上登場
> するのなら、たぶんBooleanTextFieldとかいうコンポーネントを作ると思います。BooleanTextFieldはgetConverter()を
> オーバーライドし、「はい」「いいえ」をBoolean.TRUE, Boolean.FALSEに変換するYesNoConverterを返すように作ると
> 思います。
> 
> 
> 
> ちなみにこれがLabelの話ならば、BooleanなModelObjectを「はい」「いいえ」に変換する、AbstractReadOnlyModelの
> サブクラスを作って、Labelにこのモデルを渡すと思います。
> 
> 
> 
> ただ、「正しい方法」を求められているならば、「そんなものはない」という解答になります。
> 毎回匿名サブクラスを作ってgetConverterをオーバーライドするのがいいと思うなら、そうしてもいいわけで。
> 
> 私はWicketではコンポーネントなりモデルなりの独自実装をどんどん作って再利用するのがいいと思うので、
> BooleanTextFieldとかSqlDateTextFieldとかを作りますが、それが「正解」だということはできないですねえ。
> 私はそれが楽だと思います、としか。。。
> 
> 
> 参考になれば。
> 
> 
> 
> On 2009/06/26, at 15:23, 古川 烈 wrote:
> 
> > 古川です、
> > Converterの取り扱いについて悩んでおります。
> >
> > あるデータ型について、アプリケーション全体でコンバータを差し替えたい時は、Applicationクラスにて
> >
> >     @Override
> >     protected IConverterLocator newConverterLocator() {
> >
> >         /* Wicket標準のコンバータ実装を生成する */
> >         ConverterLocator locator = new ConverterLocator();
> >
> >         /* Boolean.classのコンバータを独自コンバータで上書き */
> >         locator.set( Boolean.class, new YesNoConverter() );
> >
> >         /* ロケータを返す */
> >         return locator;
> >     }
> >
> > で出来ることはわかるのですが、
> > 例えばある TextField<Boolean> thisFieldで Boolean型の値にしたがって
> >
> >     true    ->    はい
> >     false    ->    いいえ
> >
> > と入出力を切り替えたいとします。
> >
> > このとき、コンバータを切り替えたいのは、
> >
> >     TextField<Boolean> thisField
> >
> > だけであって、アプリケーション全体のBoolean型についてコンバータを切り替えたいわけではないとします。
> > この時、この入力フィールドだけコンバータを変える場合、
> >
> >     TextField<Boolean> thisField = new TextField<Boolean> ( "ほげほげ" )  {
> >
> >         @Override
> >         public IConverter getConverter( Class<?> type )  {
> >
> >             if ( Boolean.class == type )  {
> >                 return new YesNoConverter();
> >             }
> >
> >             return getConverter( type );
> >         }
> >     }
> >
> > とするのが正しいのでしょうか?
> >
> > 他にも同じタイプの入出力のフィールドがあり、使いまわししたい場合は、
> > TextFieldクラスを継承した YesNoField でも作って↑の実装を内部に記述して対応する。
> > というのが正しい方法なのでしょうか?
> >
> > それとも Boolean型を内包するYesNoクラスでも作って、データの取り扱いをYesNo型に変えた後に、
> > ConverterLocator に コンバータを追加でしょうか?
> > ( 大げさすぎる気がしますが。。。 )
> >
> > データ型はBooleanなんだけど、画面での表示は様々に変えたいという要件は結構あると思うのですが。
> > 例えば
> >
> >     男:女
> >     既婚:未婚
> >     左:右
> >
> > 等々。
> >
> > Boolean型に限らず、似たような状況はあると思うのですが、皆様はどうやって対応されていますか?
> > どなたかアドバイスをご教示頂きたく。
> >
> > 以上、よろしくお願い申し上げます。
> >
> > Hotmail が進化した!セキュリティーもばっちり! 安全ではやいメールをいますぐチェック。 _______________________________________________
> > Wicket-ja-user mailing list
> > Wicke****@lists*****
> > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user
> 
> ---------------------------------------------------
> 矢野 勉(やの つとむ)
> 電子メール: t_yano****@me*****
> ---------------------------------------------------
> 
> _______________________________________________
> Wicket-ja-user mailing list
> Wicke****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user

_________________________________________________________________
写真もデータもSkyDriveで安全にネット上に保存
http://clk.atdmt.com/GBL/go/153787333/direct/01/
-------------- next part --------------
HTMLの添付ファイルを保管しました...
下载 



Wicket-ja-user メーリングリストの案内
Back to archive index