最新WicketのGenericsぶりに、早くも敗れ去る

  • このエントリーをはてなブックマークに追加
  • 0

さて、最近Wicketを頑張っている。
とりあえず、「Javaウェブフレームワーク「Wicket」の使い方」を見ながら、
サンプルのコードを書いていく日々を続けようと思う。

余談だが、最初このページを見つけたとき、
サーバが落ちてたのか知らないが見れなかったので、
Twitterでつぶやいてみた所、実は
サイトオーナーに伝わっていたらしい。
と言うか、フォローされてた。俺もしてた。
と言うか、有名な人じゃねーか!
Wicket本書いとるがな。
コレは驚きだ。

で、まぁそのサイトは再起動してくれてた。
が、情報が古いとの事。でも気にせずコードを書いていく。

まず、ろくに記事を読まずに「日付を出そう!」と思い立ってみたんだが、
早速サンプルにあった。
こんな風に書けばいいらしい。

  1. add( new Label("test", new AbstractReadOnlyModel() {
  2.         public Object getObject(Component component) {
  3.             return new SimpleDateFormat("yyyy年MM月dd日").format( new Date());
  4.         }
  5.     }));

いいらしいのだが、そう上手くは行かない・・・。


なるほど!と思ってEclipseでコードを書いていたら、AbstractReadOnlyModelAbstractReadOnlyModel<T>になってるじゃないか!
驚きだ。

これが、「情報が古い」の正体か・・・!
このTに何を入れれば良いのかわからんが、解説によると

Labelは文字を表示する際に、自身のもつモデルのgetObject()を呼び出します。このときgetObject()が文字を返しさえすれば、Labelはその動作について一切気にしません。

とのことなので、とりあえずカンで書いてみる。

  1. Label title = new Label("title",new AbstractReadOnlyModel<String>(){
  2.     private static final long serialVersionUID = 1L;
  3.  
  4.     @Override
  5.     public String getObject() {
  6.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
  7.         String formatedDate = sdf.format(new Date());
  8.         formatedDate += " Wicketを試してみましょう";
  9.         return formatedDate;
  10.     }
  11. });

AbstractReadOnlyModel<T>のTは、解説に従いStringにしてみた。
すると、getObject()Stringを返すように宣言されたので、
まぁ良さげ?かなと思って続行。

試してみたら出来たから問題ないか。
でも、タイムゾーンが狂ってるのか知らないが、日付がおかしい。

しかし、ずっとこんな感じでGenericsと戦うとなると厳しいな。
やはり本購入か・・・。
本とサイトの著者が同じである以上、サイトの方は更新されないだろうし。

スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク