Wicket1.3でのURLマッピング

wicket-jaに触発されて、試しにWicketを触ってみました。1.3は最近リリースされたのですが、そのためWebに情報がほとんどないのが難点ですね。


WicketではURLマッピングをするときにXMLに書くのではなくniceURLという仕組みを使います。
これを使っていないと、
http://localhos:8080/example/?wicket:bookmarkablePage=
のようなかっこ悪いURLになってしまいます。

クラスにマッピングする

niceURLを利用するには、WebApplicationを継承したクラスのinitメソッドの中で、mountBookmarkablePageメソッドを実行します。

package example;

import org.apache.wicket.protocol.http.WebApplication;

public class ExampleApplication extends WebApplication {
	public ExampleApplication() {
		super();
	}
	public void init() {
		mountBookmarkablePage("/hoge", Hoge.class);
	}

	public Class getHomePage() {
		return Index.class;
	}
}

上のようにmountBookmarkablePageメソッドを使うことで、http://localhost:8080/example/hogeというURLにHogeというPageクラスをマッピングすることができます。
しかしこの方法だと、クラスを追加するたびにmountBookmarkablePageメソッドを追加していく必要があるので面倒です。

パッケージにマッピング

【wicket】アプリケーションのURL - t100-開発メモ - アットウィキ」を参考にやってみたところ、うまくいきませんでした。
WicketのJavaDocsを参照してみたところ、パッケージ単位で指定する場合、Wicket1.3ではmountBookmarkablePageではなくmountメソッドを使用するようです。

package example;

import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.util.lang.PackageName;

public class ExampleApplication extends WebApplication {
	public ExampleApplication() {
		super();
	}
	public void init() {
		mount("/base", PackageName.forPackage(Package.getPackage("example")));
	}

	public Class getHomePage() {
		return Index.class;
	}
}

上記の場合、exampleというパッケージを指定しています。
この設定をすると、http://localhost:8080/example/base/HogeというURLでPageクラスであるHogeを呼び出すことができます。
パッケージ単位の場合、/直下にマッピングはできないのかな?


ちなみにniceURLを使う場合、パラメータを持つURLはhttp://localhost:8080/example/hoge/param1/1/のようになります。


参考:
http://d.hatena.ne.jp/t_yano/20070626/1182882962