Wicketはコンポーネントベースのフレームワークであり、時には単調なWebプログラミングタスクの初期のソリューションの一部とは対照的です。他のフレームワークと同様、WicketはSunのサーブレットAPIの上に構築されています。
しかし、StrutsやSpring MVCなどのフレームワークとは異なり、Wicketを使用している開発者は、Webとサーブレットに固有の要求/応答の性質からほとんど削除されています。 Wicketの開発者は、多くのユーザーとスレッドに同時にサービスを提供し、要求を取り込み、応答を返し、何の状態も格納しないコントローラを構築するのではなく、ステートフルなコンポーネントを考えています。コントローラーまたはアクションクラスを作成する代わりに、ページを作成し、その上にコンポーネントを配置し、各コンポーネントがユーザー入力にどのように反応するかを定義します。
Wicketは、テンプレートとしてプレーンXHTMLを使用しています。各コンポーネントは、XHTMLの名前付き要素にバインドされ、最終出力にその要素を描画する役割を果たします。このページは単にトップレベルのコンポーネントを含むもので、正確に1つのXHTMLテンプレートとペアになっています。
各コンポーネントは、コンポーネントの状態を表す独自のモデルによってサポートされています。フレームワークは、コンポーネントがモデルとどのように相互作用するかを認識していません。モデルは自動的にシリアライズされ、要求間で保持されます。しかし、より複雑なモデルは取り外し可能にすることができ、各要求サイクルの始めと終わりに独自の保管と修復を行うフックを提供することができます。
Wicketでは、すべてのサーバー側の状態が自動的に管理されます。状態を格納するためにHttpSessionオブジェクトまたは同様のラッパーを直接使用しないでください。代わりに、状態はコンポーネントに関連付けられます。各サーバー側ページ・コンポーネントは、ステートフル・コンポーネントのネスト階層を保持します。各コンポーネントのモデルは、最終的にPOJO(Plain Old Java Object)です。
バージョン | 発売日 |
---|---|
8.0.0-M4 | 2017-02-07 |
7.6.0 | 2016年12月29日 |
6.26.0 | 2016年12月29日 |
私の最初のWicketセットアップ、ホーム画面にHello Worldを表示するアプリ:
import org.apache.wicket.protocol.http.WebApplication;
public class HelloWorldApplication extends WebApplication {
public HelloWorldApplication() {
}
@Override
public Class getHomePage() {
return HelloWorld.class;
}
}
HelloWorld.java
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
public class HelloWorld extends WebPage {
public HelloWorld() {
add(new Label("message", "Hello World!"));
}
}
HelloWorld.html
<html>
<body>
<span wicket:id="message">Message goes here</span>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>My first Wicket App</display-name>
<filter>
<filter-name>HelloWorldApplication</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>org.apache.wicket.examples.helloworld.HelloWorldApplication</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>HelloWorldApplication</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
pom.xml
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-core</artifactId>
<version>${wicket.version}</version>
</dependency>