Wicket Examples - helloworld編 -
Wicketの勉強を兼ね、Wicket Examples(1.2.6)のhelloworldのソースを見ています。この例題は、"Hello World!"を表示するだけですが、Wicketを使ったアプリケーションの基本となります。
親クラス(WicketExampleApplication.java)
まずは、アプリケーションクラス・・・の前に、親クラスから。この親クラスは、すべての例題アプリケーションクラスの親クラスになっています。やっていることは、
- ロギングの準備
- 初期化メソッドのオーバーライド(init())
です。initメソッドでは、
と、get*Setting()メソッドで設定インスタンスを取得し、アプリケーション全体の初期設定を行っています。
protected void init()
{
// The NoCrypt class is being used here because not everyone
// has the java security classes required by Crypt installed
// and we want them to be able to run the examples out of the
// box.
getSecuritySettings().setCryptFactory(
new ClassCryptFactory(NoCrypt.class, ISecuritySettings.DEFAULT_ENCRYPTION_KEY));
}
アプリケーションクラス(HelloWorldApplication.java)
次は、アプリケーションクラスです。ホームページクラスを返しています。
public Class getHomePage()
{
return HelloWorld.class;
}
Pageクラス(HelloWorld.java)
次に、Pageクラスです。親クラス(WicketExamplePage)でやっていることは後回しにするとして、コンストラクタでLabelコンポーネントを設定しているだけです。コンポーネントにはModelを設定するそうですが、Labelコンポーネントは文字列が設定されることが前提みたいなので、Stringを引数にとるコンストラクタがあり、ここではそれを使用しています。内部的には、Modelのインスタンスが生成されるそうです。
これで、対応するHTMLテンプレートページの、wicket:idが"message"である要素とLabelコンポーネントが結びつけられるようです。
public HelloWorld()
{
add(new Label("message", "Hello World!"));
}
HTMLテンプレートページ(HellowWorld.html)
最後に、HTMLテンプレートページです。"mainNavigation"の方は、例題全般に共通なパネルコンポーネントなのでさておき、wicket:idが"message"である要素に、先程のLabelコンポーネントが持つModelから値を取得して設定しています。
<body> <span wicket:id="mainNavigation"/> <span wicket:id="message" id="message">Message goes here</span> </body>
どうやら、wicket:idとidは別々に指定出来るようです。確かに、アプリケーションクラスの初期設定で、「wicket:*」を消す指定が出来るそうなので、idも別途指定出来ないとねぇ。