超基本構成
さて,最初のWicketアプリケーションを作成してみる。最初なので,1ページのみの超基本構成のWebアプリケーションにしよう。表示のみの機能だが,動的な項目を一つ準備する。WTPでwicket-testプロジェクトをまだ作っていない方は,「 開発の準備をしよう」を読んで作成して欲しい。
まずは,POHPなHTMLファイルを作成する。名前は「FirstPage.html」とし,作成先は「wicket-test/JavaSource/test」とする。つまり,testパッケージを作成して,その中に配置するということである。
First Page
名前
wicket:id=”name”>ここに名前が入る
太字にした「wicket:id」属性がポイントである。この属性で指定した要素のBody部分が,動的コンテンツとして置換の対象となる。もちろんこの属性はWebブラウザは無視するので,以下のように単なるHTMLとして表示される。
Wicketでは,POHP1つに対して,WebPageクラスを継承したクラスを一つ準備するのが基本である。下記のように「test.FirstPage」クラスを作成する。
package test; import wicket.markup.html.WebPage; import wicket.markup.html.basic.Label;
public class FirstPage extends WebPage { public FirstPage() { add(new Label(“name”, “よういちろう”)); } }
コンストラクタ内で,Labelオブジェクトを生成して,addメソッドに渡して登録を行っている。Labelクラスのコンストラクタには,POHPファイル内のwicket:id属性の値と,置換後の文字列を引数として指定する。コードだけ見たら,まるでGUIアプリケーションのコードである。LabelオブジェクトがWicketにより処理され,POHPファイルのwicket:id属性で指定された部分が置換処理される。
POHPファイルとWebPageクラスが準備できたが,WicketではWebアプリケーションを管理するためのクラスとして,WebApplicationクラスのサブクラスを作成する必要がある。
package test; import wicket.ApplicationPages; import wicket.protocol.http.WebApplication;
public class FirstApplication extends WebApplication { public FirstApplication() { ApplicationPages pages = getPages(); pages. setHomePage(FirstPage.class); } }
コンストラクタ内で,getPagesメソッドによりApplicationPagesオブジェクトを取得し,そのsetHomePageメソッドに先ほどのFirstPageクラスのクラスオブジェクトを渡して,このWebアプリケーションのトップページを指定している。
あとは,web.xmlファイルを作成すれば,Wicketアプリケーションの完成だ。web.xmlファイルでは,サーブレットの登録を行う。
version=”1.0” encoding=”UTF-8”?
wicket-test firstApplication wicket.protocol.http.WicketServlet
applicationClassName
test.FirstApplication firstApplication /first/*
サーブレットとして,wicket.protocol.http.WicketServletクラスを指定する。これがWicketアプリケーションのコントローラとなる。これのapplicationClassNameパラメータに,先ほど作成したFirstApplicationクラスを指定する。この指定により,WicketServletオブジェクトはFirstApplicationオブジェクトを利用するようになる。
以上で準備完了である。Tomcatサーバを起動して,「http://localhost:8080/wicket-test/first」にWebブラウザでアクセスしてみよう。
「ここに名前が入る」という文字列が,「よういちろう」に変わったことがわかるはずだ。WebPageオブジェクトに登録されたLabelオブジェクトにより, のBody部分が置換された証拠である。
以上がWicketアプリケーションの超基本構成である。まずはここからいろいろと発展させていくのが良いだろう。