いろんなJava Webフレームワークで同じ画面を作ってみる(Wicket編)
いろんなJava Webフレームワークで同じ画面を作ってみる(Wicket編)です。
お題は、こちら。
- 公式サイト: Apache Wicket - Welcome to Apache Wicket
- 使用したバージョン: 1.4.13
Wicketの特徴は、
- ステートフル
- HTMLテンプレート
- コンポーネント指向
といったところでしょうか。
(追記:2010/12/13)コメント頂き、Wicketの場合、画面を分けるのはおかしいとのことで一緒にしました。また、CompoundPropertyModel使ったらちょっとすっきりしました。
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>wicket</display-name> <filter> <filter-name>wicket.add</filter-name> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> <init-param> <param-name>applicationClassName</param-name> <param-value>webapp.AddApplication</param-value> </init-param> </filter> <filter-mapping> <filter-name>wicket.add</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
applicationClassName にアプリケーションクラスを指定します。
AddApplication.java
package webapp; import org.apache.wicket.protocol.http.WebApplication; public class AddApplication extends WebApplication { public AddApplication() { } public Class<AddPage> getHomePage() { return AddPage.class; } }
AddPage.java
package webapp; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.CompoundPropertyModel; public class AddPage extends WebPage { private static final long serialVersionUID = 1L; private Integer arg1; private Integer arg2; public AddPage() { Form<AddPage> form = new Form<AddPage>("form", new CompoundPropertyModel<AddPage>(this)); form.add(new TextField<Integer>("arg1").setRequired(true)); form.add(new TextField<Integer>("arg2").setRequired(true)); form.add(new Label("result", new AbstractReadOnlyModel<Integer>() { private static final long serialVersionUID = 1L; @Override public Integer getObject() { if (arg1 == null || arg2 == null) { return null; } return arg1 + arg2; } })); this.add(form, new FeedbackPanel("feedback")); } }
addPage.html
<?xml version="1.0" encoding="UTF-8"?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> <head> <title>add</title> </head> <body> <div wicket:id="feedback"></div> <form wicket:id="form"> arg1:<input wicket:id="arg1" type="text" /> + arg2:<input wicket:id="arg2" type="text" /> = <span wicket:id="result"></span> <br/> <input type="submit" /> </form> </body> </html>
以下、修正前のコードです。
CompoundPropertyModelを使うように修正しておりますが。
AddApplication.java
package webapp; import org.apache.wicket.protocol.http.WebApplication; public class AddApplication extends WebApplication { public AddApplication() { } public Class<InputPage> getHomePage() { return InputPage.class; } }
InputPage.java
package webapp; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.model.CompoundPropertyModel; public class InputPage extends WebPage { private static final long serialVersionUID = 1L; private Integer arg1; private Integer arg2; public InputPage() { Form<InputPage> form = new Form<InputPage>("form", new CompoundPropertyModel<InputPage>(this)); Button submit = new Button("submit") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { this.setResponsePage(new ResultPage(arg1 + arg2)); } }; form.add(new TextField<Integer>("arg1").setRequired(true), new TextField<Integer>("arg2").setRequired(true), submit); this.add(form); this.add(new FeedbackPanel("error")); } }
ResultPage.java
package webapp; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.model.Model; public class ResultPage extends WebPage { private static final long serialVersionUID = 1L; public ResultPage(Integer result) { this.add(new Label("result", new Model<Integer>(result))); } }
InputPage.html
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" > <head> <title>input</title> </head> <body> <div wicket:id="error"></div> <form wicket:id="form"> arg1: <input wicket:id="arg1" type="text" /><br/> arg2: <input wicket:id="arg2" type="text" /><br/> <input wicket:id="submit" type="submit" /> </form> </body> </html>
ResultPage.html
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" > <head> <title>input</title> </head> <body> result: <span wicket:id="result">dummy</span> </body> </html>
以上