Wicket 2013.09.12 Hiroto Yamakawa
@gishi_yama yamakawa@photon.chitose.ac.jp Apache Wicket 6 Wicket Wicket-Sapporo New!
"...Wicket Java " Java Apache Wicket, "Apache Wicket Web ",, pp.17 "...Apache Wicket is a Java software framework that aims to bridge the between object-oriented programming and the fact that the web is built on HTTP, which is a stateless protocol." Martijn Dashorst, Eelco Hillenius, "Wicket in Action", Manning Publications Co., pp.23 "Wicket simplifies web development and makes it fun." Igor Vaynberg, "Apache Wicket Cookbook", Packt Pablishing, pp.1
Wicket Java Web
" Web Wicket Web, "Wicket 1 Hello, Wicket",, http://gihyo.jp/dev/feature/01/wicket/0001 "
Wicket =
General schema of page request handling for a component oriented framework Andrea D B, Carsten H, Christian K, Daniel B, "Apache Wicket User Guide", http://wicketguide.comsysto.com/guide/chapter2.html#chapter2_2 Wicket Wicket
http://wicket.apache.org/
POJO XML Java Web Apache Wicket
HTML Java
<p>foo</p> <p>bar</p> foo, bar JSP Web... HTML HTML (HTML )
<p wicket:id="foo">foo</p> <p wicket:id="bar">bar</p> Apache Wicket... TestPage.html TestPage.java add(new Label("foo", new Model("こんにちは!"))); add(new Label("bar", new Model("Wicket-Sapporoへようこそ!"))); <p>こんにちは!</p> <p>wicket-sapporoへようこそ!</p> Browser
wicket:id Java HTML HTML (HTML )
HTML
POJO HTML Java
XML Web.xml servlet-filter, servlet-mapping
Web.xml <filter> <filter-name>myapp</filter-name> <filter-class>org.apache.wicket.protocol.http.wicketfilter</filter-class> <init-param> <param-name>applicationclassname</param-name> <param-value>jp.example.myapplication</param-value> </init-param> </filter> <filter-mapping> <filter-name>myapp</filter-name> <!-- コンテキストパス 以 下 はWicketの 制 御 の 対 象 にする 場 合 --> <url-pattern>/*</url-pattern> </filter-mapping> URL Java Java
XML XML
...
Swing
CleanURL Ajax JUnitTest Java Wicket 6 Ajax JQuery i18n Html
Wicket Auth/Roles API API Google Guice Spring CDI Velocity JMX Bootstrap API
Web Framework Benchmarks(Round 6, Language:Java, Tests:Single Query, HardWare:i7) http://www.techempower.com/benchmarks/ JSON
http://www.cafepress.com/apachewicket
"Several books have been written about Apache Wicket, 5 in English, 2 in German and 1 in Japanese." (Books about Wicket, http://wicket.apache.org/learn/books/ )
Wicket Ver,1.4 http://www.amazon.co.jp/dp/4798022217/ Wicket
Wicket User Guide ver,6 https://code.google.com/p/wicket-guide/ Wicket http://wicketguide.comsysto.com/
Wicket Wicket-JA http://www.wicket-ja.org/
Q. Wicket-Ja ML... A. ML
...
http://builtwithwicket.tumblr.com/
( in Japan... e SNS
Wicket Java POJO HTML/ XML
Wicket
MacOSX OS Mavan3 Jetty 1. https://github.com/gishi-yama/wicket_workshop 2. Download ZIP 3. $ cd wicket_workshop-master $ mvn package $ mvn jetty:run 4. http://localhost:8080/wiclet_workshop/
Wicket Maven Wicket QuickStart Maven http://wicket.apache.org/start/quickstart.html Maven pom.xml <dependency> <groupid>org.apache.wicket</groupid> <artifactid>wicket-core</artifactid> <version>6.10.0</version> </dependency>
Wicket Wicket INF/lib/ Maven http://wicket.apache.org/ /WEB- wicket-core.jar wicket-request.jar wicket-util.jar
Wicket Wicket SLF4J Wicket QuickStart SLF4J Log4J Logback http://logback.qos.ch/ http://www.slf4j.org/ SLF4J
Wicket Web.xml web.xml <filter> <filter-name>myapp</filter-name> <filter-class>org.apache.wicket.protocol.http.wicketfilter</filter-class> <init-param> <param-name>applicationclassname</param-name> <param-value>jp.example.myapplication</param-value> </init-param> </filter> <filter-mapping> <filter-name>myapp</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> filter/filter-name filter/init-param/param-value filter-mapping/url-pattern
WebApplication package jp.example; public class MyApplication extends WebApplication { /* snip */ } web.xml filter/initparam/param-value <init-param> <param-name>applicationclassname</param-name> <param-value>jp.example.myapplication</param-value> </init-param>
public class MyApplication extends WebApplication { } @Override public Class<? extends Page> gethomepage() { return HomePage.class; } HomePage.class.java
HTML HTML SimplePage.html <!DOCTYPE html> <html lang="ja" xmlns:wicket="http://wicket.apache.org"> <head> <meta charset="utf-8" /> </head> <body> <p>message1 is here.</p> </body> </html>
HTML wicket:id <body> <p wicket:id="label1">message1 is here.</p> </body> wicket:id
HTML public class SimplePage extends WebPage { public SimplePage() { } } SimplePage.java WebPage HTML HTML Wicket
HTML public class SimplePage extends WebPage { public SimplePage() { // 1. 表 示 したいデータ(オブジェクト)を 用 意 する. String message1 = "こんにちは!"; // 2. 表 示 したいオブジェクトをModelオブジェクトでラップします IModel<String> model1 = new Model<>(message1); // 3. Modelを 対 応 するHTMLのwicket:id 用 のコンポーネントにセットします Label label1 = new Label("label1", model1); } // 4. コンポーネントをページにaddします add(label1); }
HTML...
Wicket, "Apache Wicket Web ",, pp.29
HTML 1 HTML Wicket:id add http://www.wicket-library.com/wicketexamples/compref/
Label IModel<String> model = new Model<>("こんにちは!"); Label foolabel = new Label("foo", model); add(foolabel); MultiLineLabel Label Model IModel<String> model = new Model<>("こんにちは!\n 今 日 も 良 い 天 気 ですね!"); MultiLineLabel foolabel = new MultiLineLabel("foo", model); add(foolabel);
Link IModel<Bean> model = new Model<>(new Bean()); Link<Bean> link = new Link<Bean>("foo", model) { private static final long serialversionuid = 1L; @Override public void onclick() { // リンクやボタンがクリックされたときのイベント 処 理 // この 例 では LinkにセットされたModel( 中 身 はBeanオブジェクト)を // 次 ページへ 渡 して 遷 移 する setresponsepage(new NextPage(getModel())); } }; add(link);
Form TextField : IModel<Bean> model = new CompoundPropertyModel<>(new Bean()); Form<Bean> form = new Form<Bean>("foo", model)) { private static final long serialversionuid = 1L; @Override protected void onsubmit() { // Submitボタンがクリックされたときのイベント 処 理 // たとえば BeanをDBに 登 録 する など } }; add(form); form.add(new TextField<String>("input")); ) CompoundPropertyModel TextField Bean#input
Wicket HTML Form form setmodel(imodel) getmodel() HTML wicket:id
wicket:id HTML <form wicket:id="form"> <input type="text" wicket:id="name"> </form> <p wicket:id="label">message</p> Java Form<Bean> form = new Form<Bean>("form", formmodel) { /* snip */ }; // wicket:id="form" は 最 上 位 なので ページにadd add(form); // wicket:id="name" は "form" の 入 れ 子 の 位 置 にあるので // wicket:id="form" のコンポーネントであるformにadd form.add(new TextField<String>("name")); Label label = new Label("label", labelmodel); // wicket:id="label" は 最 上 位 なので ページにadd add(label);
Model String str = "こんにちは"; IModel<String> model = new Model<>(str); add(new Label("foo", model);
ListModel Model List<Integer> list = new ArrayList(); list.add(1); list.add(2); IModel<List<Integer> listmodel = new ListModel<>(list);
Bean CompoundPropertyModel wicket:id
CompoundPropertyModel IModel beanmodel = new CompoundPropertyModel<>(new Bean()) setdefaultmodel(beanmodel); add(new Label("loginId"); add(new Label("name");
ResourceModel Java Code i18n IModel<String> beanmodel = new ResourceModel("form.error"); form.error= 送 信 エラーが 発 生 しました 入 力 値 を 確 認 してください
setobject(object) getobject() Serializable
Wicket HTML HTML HTML wicket:id Wicket