Wicket Examples - helloworld編 -

Wicketの勉強を兼ね、Wicket Examples(1.2.6)のhelloworldのソースを見ています。この例題は、"Hello World!"を表示するだけですが、Wicketを使ったアプリケーションの基本となります。

親クラス(WicketExampleApplication.java)

まずは、アプリケーションクラス・・・の前に、親クラスから。この親クラスは、すべての例題アプリケーションクラスの親クラスになっています。やっていることは、

  • ロギングの準備
  • 初期化メソッドのオーバーライド(init())

です。initメソッドでは、


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));
}
と、get*Setting()メソッドで設定インスタンスを取得し、アプリケーション全体の初期設定を行っています。

アプリケーションクラス(HelloWorldApplication.java)

次は、アプリケーションクラスです。ホームページクラスを返しています。


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

Pageクラス(HelloWorld.java)

次に、Pageクラスです。親クラス(WicketExamplePage)でやっていることは後回しにするとして、コンストラクタでLabelコンポーネントを設定しているだけです。コンポーネントにはModelを設定するそうですが、Labelコンポーネントは文字列が設定されることが前提みたいなので、Stringを引数にとるコンストラクタがあり、ここではそれを使用しています。内部的には、Modelのインスタンスが生成されるそうです。


public HelloWorld()
{
add(new Label("message", "Hello World!"));
}
これで、対応するHTMLテンプレートページの、wicket:idが"message"である要素とLabelコンポーネントが結びつけられるようです。

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も別途指定出来ないとねぇ。

あと、GrailsWicketプラグインに入っていたソースなどは、これを参考にした感じです。