wicket勉強会メモ
- wicketとは
id:t_yanoさんの紹介記事がわかりやすい。
http://www.javelindev.jp/wicket/
特徴がよくわかるエントリ
http://d.hatena.ne.jp/t_yano/20070116/1168972384
- 必要な環境
以下をWEB-INF/libにインポートする。
テンプレートエンジンvelocityは必ずしも必要ない
-
- velocity-1.4.jar
- velocity-dep.1.4jar
以下は実際に利用するロガーによって代わる
-
- slf4f-log4j12-1.3.2.jar
- log4j-1.2.13.jar
- 関連リンク
本家 http://wicket.apache.org/index.html
ロギングラッパ http://www.slf4j.org/download.html
wicket最新版は1.3.2
1.3からapacheのトップレベルのプロジェクトとなり、パッケージ名他が変更されている。
基本的な作成方法
http://journal.mycom.co.jp/articles/2006/05/08/wicket/
但し、上のページはバージョンが古いので下記のエントリ参照
http://d.hatena.ne.jp/kajilab/20080226/1204037826
- 内部クラス、無名クラス
http://www.javaroad.jp/java_class15.htm
内部クラスを復習しておくこと
- 基本的な理解
構築しようとするアプリケーションをorg.apache.wicket.protocol.http.WebApplicationのサブクラスとして作る
制作しようとするhtmlコンテンツをxxxx.htmlとして作る
さらに、それに対応するjavaコードをorg.apache.wicket.markup.html.WebPageのサブクラスとして作る。
そのhtmlファイルとjavaコードは原則として同じファイルシステム上の階層に置く
WebPageクラスはコンテナであり、Label、Formなど様々なページの構成要素をaddすることにより作る。
構成要素とhtml上の要素とをひも付けするのは "wicket:id" 属性で表現されるidである。
例)
<span wicket:id="message">ここにメッセージが表示される。</span>
javaコード上のmessageにひも付けされた内容によって、"ここにメッセージが表示される"の中身が書き換わる。
このhtmlコンテンツの要素に相当するjavaコード上のオブジェクトをモデルオブジェクトと呼ぶ。
モデルオブジェクトはIModelインターフェースを実装しているクラスである。
- ExamplePage.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>ここにタイトルを挿入</title> </head> <body> <span wicket:id="message">ここにメッセージが表示される。</span> <form wicket:id="form"> <input wicket:id="textField" type="text"/> <input wicket:id="nextButton" type="submit" value="Next"/> </form> <dl wicket:id="entryList"> <dt><span wicket:id="title">2006/8/30</span></dt> <dd><span wicket:id="entry">記事のdescriptionです。</span></dd> </dl> <div wicket:id="feedback">ここにエラー内容を表示</div> </body> </html> NextPage.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>ここにタイトルを挿入</title> </head> <body> <span wicket:id="nextMessage">ここに次のメッセージが表示される。</span> </body> </html>
- ExamplePage.java
public class ExamplePage extends WebPage { private static final long serialVersionUID = 1L; public ExamplePage() { //表示する文字をセットしたLabelを作成しページに追加 super.add(new Label("message", "Hello Wicket!")); Form form = new Form("form"); add(form); TextField textField =new TextField("textField", new Model()) ; // textField.setRequired(true); // textField.add(new PatternValidator("^http://.*$")); form.add(textField); add( new FeedbackPanel("feedback")); Button nextButton = new Button("nextButton"){ private static final long serialVersionUID = 1L; public void onSubmit() { // setResponsePage(NextPage.class); setResponsePage(new NextPage(this.getParent().get("textField").getModel())); } };//匿名クラス form.add(nextButton); //リストビューを作る final IModel entryListModel = new LoadableDetachableModel(){ protected Object load() { List<String> entryList = new ArrayList<String>(); for(int i=0;i<15;i++){ entryList.add("sampleentry"+i); } return entryList; } }; final ListView listView = new ListView( "entryList", entryListModel) { public void populateItem(ListItem item) { final String entry = (String)item.getModelObject(); item.add( new Label( "title", entry.substring(entry.length()-1, entry.length()))); item.add( new Label( "entry", entry)); } }; add( listView); } } public class NextPage extends WebPage { private static final long serialVersionUID = 1L; public NextPage() { super.add(new Label("nextMessage", "これは2ページ目です。")); } public NextPage(IModel model) { super.add(new Label("nextMessage", model)); } }