Wicket1.2.3と1.4-rc2の違い

最近巷で騒がれてるWicketをちょいとイジってみました。

勉強用に参考にしたのは↓のページ。

Javaウェブフレームワーク「Wicket」の使い方

Wicket1.2.3と1.4-rc2の違いをまとめてみる。(基礎レベルで)

Eclipseで試す時の注意点も少々。

ただ色んなブログやサイトを参考にしただけですが。

(ちなみに「Wicket1.2.3の場合」って書いてありますが、実際に試したわけじゃありませんのであしからず。)

必要なJarライブラリ

Wicket1.2.3の場合
  • log4j-1.2.13.jar
  • commons-logging-1.0.4.jar
  • junit-3.8.1.jar
  • wicket-1.2.jar
Wicket1.4-rc2の場合
  • log4j-1.2.15.jar
  • slf4j-api-1.5.6.jar
  • slf4j-log4j12-1.5.6.jar
  • wicket-1.4-rc2.jar

slf4jもlog4jのようなロギング用ライブラリで、

Wicket 1.3.0からlog4jではなく、slf4jになったらしいです。

(参考:rio’s blog Wicket の勉強 (1) Wicket 始めました。

slf4j-log4j12-1.5.6.jarはslf4jとlog4jの繋ぎみたいなもん(たぶん)

web.xml

Wicket1.2.3の場合(サーブレット)
<servlet>
  <servlet-name>SampleWicketServlet</servlet-name>
  <servlet-class>wicket.protocol.http.WicketServlet</servlet-class>
  <init-param>
    <param-name>applicationClassName</param-name>
    <param-value>Sample.Application</param-value>
  </init-param>
</servlet>
Wicket1.4-rc2の場合

上の記述だと、

javax.servlet.ServletException: ラッパがサーブレットクラス wicket.protocol.http.WicketServlet 又はそれが依存するクラスを見つけることができません

てな感じで怒られる。

パッケージが変わってクラスローダがWicketServletを見つけれないのが原因。

<servlet-class>wicket.protocol.http.WicketServlet</servlet-class>

<servlet-class>org.apache.wicket.protocol.http.WicketServlet</servlet-class>

に変えてやる。

ちなみにFileterでも可。

<filter>
  <filter-name>SampleWicketFilter</filter-name>
  <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
  <init-param>
    <param-name>applicationClassName</param-name>
    <param-value>Sample.Application</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>SampleWicketFilter</filter-name>
  <url-pattern>/sample/*</url-pattern>
</filter-mapping>

Component#getModelObjectAsString()

モデルからStringを取得するメソッド。

Wicket1.4-rc2だと、

「Component#getModelObjectAsString()」は定義されてません。

「Component#getDefaultModelObjectAsString()」を使います。

AbstractFormValidatorの抽象メソッド

フォーム上の複数の項目を使って検証する為にAbstractFormValidatorを実装しますが、

そのときに実装させる必要があるメソッドが違いました。

Wicket1.2.3の場合

「public FormComponent[] getDependentFormComponent()」を実装。

Wicket1.4-rc2の場合

「public FormComponent>[] getDependentFormComponents()」を実装。

ちなみに、1.4-rc2でも互換性の為か、

「public FormComponent[] getDependentFormComponent()」は残っています。

メッセージ用プロパティファイルのキー

いろんなサイト探しましたが、はっきり載っている所が無かったので、

wicketのデフォルトのプロパティファイルを参照しました。

Wicket1.2.3の場合
RequiredValidator = ${label}を入力して下さい。
Wicket1.4-rc2の場合
Required = ${label}を入力して下さい。

Eclipseで試す時の注意点

「コンパイラー準拠レベル」は5.0以上にする

まぁ当たり前ですが。

1.4以下にしとくと、ジェネリクスをサポートしてないので、

「互換性ねぇよバカ」的なコンパイルエラーになります。

しょっぱなのorg.apache.wicket.Application#getHomePage()でエラー出ます。

Applicationクラスでの定義がこんな感じなので。

public abstract Class<? extends Page> getHomePage();
ビルドのフィルターの「.html」を外しておく

Eclipseのデフォルト設定だとビルド時にclassフォルダに

htmlファイルを含めないようになっているため。

RuntimeExceptionが投げられます。

(参考:Wicket学習帳: wicketでMarkup of type ‘html’

感想

自他ともに認めるStruts厨の僕ですが、

「JSPはスマートじゃない」と日ごろ感じていたので、

Wicketのそのスマートさに痺れました。

ViewとControllerの依存性が低い感じ。

Strutsよりも分業しやすいんじゃないかなー

あと、Strutsの学習するより、Wicketの学習の方がコスト少ないと思う。

Wicketの考え方(構成?)はSwingにも使えるし、

オブジェクト指向を学ぶんだったら断然Wicketですよ奥さん。

このエントリーをはてなブックマークに追加
comments powered by Disqus