// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Wicket Webフレームワーク入門
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Wicket Webフレームワーク入門 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Wicket Webフレームワーク入門

このドキュメントは、再利用可能なコンポーネントを作成し、それらを組み合せてWebアプリケーションを作成する場合の基本事項について説明します。各コンポーネントは、JavaクラスとHTMLファイルで構成されます。この方法によるアプリケーションの開発を可能にするフレームワークはWicketと呼ばれます。コンポーネント・ベースのアプローチ以外のWicketの際立った特徴は、XML構成ファイルを使用しないことです。XML構成ファイルのかわりに、ホーム・ページのIDなどのアプリケーション全体に関係する設定にはJavaクラスを使用します。

Webアプリケーション内の各ウィジェットは、Javaクラスで作成され、HTMLページにレンダリングされます。JavaクラスおよびHTMLページは、同じ名前を持ち、同じソース構造に存在する必要があります。Wicket識別子によって相互にリンクされます。少ない労力でWebアプリケーションに一貫性のあるルック・アンド・フィールをもたらす再利用可能なコンポーネントを迅速かつ効率的に作成できるように、IDEでのWicketアプリケーションの開発のサポートについて説明します。


image::images/netbeans-stamp-80-74-73.png[title="このページの内容は、NetBeans IDE 7.2、7.3、7.4および8.0に適用されます"]


*このチュートリアルに従うには、次のソフトウェアとリソースが必要です。*

|===
|ソフトウェアまたはリソース |必須バージョン 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.2、7.3、7.4、8.0、Java EE 

|Java Development Kit (JDK) |link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+バージョン7+]以降 

|NetBeans IDE用Wicketプラグイン |link:http://plugins.netbeans.org/plugin/3586/wicket-support[+NetBeans Wicketプラグイン・ページ+] 

|GlassFish Server Open Source Edition
_または_
Tomcatサーブレット・コンテナ |3.1.x以降
_ _ 
バージョン7.x以降 
|===

*注意: *

* NetBeans用Wicketサポート・プラグインは、次のモジュールで構成されます。
* *org-netbeans-modules-web-wicket.nbm。*このチュートリアルで使用されるWicket固有の機能を提供します。
* *org-netbeans-modules-wicket-templates.nbm。*ページやパネルなどの一般的なWicketアーティファクトを作成するためのWicketファイルレベル・テンプレートを提供します。
* *org-netbeans-modules-wicket-library.nbm。*Wicket JARを提供します。IDEのライブラリ・マネージャにインストールします。したがって、必要なものがすべてプラグインに含まれているため、WicketサイトからWicketディストリビューションをダウンロードする必要はありません。
* Wicketサポート・プラグインをIDEにインストールするには、プラグイン・マネージャ(メイン・メニューから「ツール」>「プラグイン」)に移動し、「ダウンロード済」タブのプラグインをインストールします。IDEへのフレームワーク・プラグインのインストール方法の詳細は、link:framework-adding-support.html[+「Webフレームワークのサポートの追加」+]を参照してください。
* Wicketの詳細は、link:http://wicket.sourceforge.net/[+http://wicket.sourceforge.net/+]を参照してください。NetBeans IDEでのWicketのサポートの開発ページは、link:http://java.net/projects/NbWicketSupport[+http://java.net/projects/NbWicketSupport+]を参照してください。Wicketに精通している場合は、NetBeans IDE用Wicketプラグインにコードを提供してください。


== 環境の設定

Wicketアプリケーションの作成を開始する前に、必要なソフトウェアがすべてあること、およびプロジェクトが正しく設定されていることを確認する必要があります。前述のとおり、NetBeans IDE用Wicketサポート・プラグインをインストールすると、Wicketアプリケーションに必要なすべての基本的なファイルを設定するウィザードが使用可能になります。


=== Wicketアプリケーションのソース構造の作成

アプリケーションのソース構造には、Wicket JARファイル、 ``web.xml`` ファイルでのWicketサーブレットの登録、およびアプリケーション・クラスやホーム・ページなどの標準的なアーティファクトが含まれている必要があります。IDEを使用しているため、これらすべてのファイルを手動で作成する必要はありません。かわりに、この処理を行うウィザードがあります。

ニーズに応じて、次のシナリオのうち適切ななものを1つ選択します。

* <<create-1,シナリオ1: AntベースのWicketアプリケーションの一からの作成>>
* <<create-2,シナリオ2: MavenベースのWicketアプリケーションの一からの作成>>
* <<create-3,シナリオ3: MavenベースのWicketアプリケーションの原型からの作成>>
* <<create-4,シナリオ4: 既存のアプリケーションへのWicketサポートの追加>>


==== シナリオ1: AntベースのWicketアプリケーションの一からの作成

IDEで新しいWebアプリケーションを作成する場合、Webアプリケーション・ウィザードの最後のパネルがWicketアプリケーションのコンテキストで非常に役立ちます。

1. 「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」から「Web」を選択します。「プロジェクト」で「Webアプリケーション」を選択します。「次」をクリックします。
2. 「名前と場所」パネルで、「プロジェクト名」に「 ``MyFirstWicketApp`` 」と入力します。「プロジェクトの場所」を使用コンピュータ上の任意のフォルダに変更します。「次」をクリックします。
3. すべての設定を未変更のままにします。あるいは、必要に応じて変更することもできます。Wicketは、Java EEのどのバージョンでもサポートします。Wicketアプリケーションは任意のサーバーにデプロイできます。「次」をクリックします。
4. 
「フレームワーク」パネルで、次に示すように、「Wicket」を選択します。

image::https://blogs.oracle.com/geertjan_images/resource/wicket-160-nb.png[]

*注意: *IDEにインストールされているモジュールに応じて、上のスクリーンショットに示された「フレームワーク」リストに表示される項目は異なります。

前述のパネルで、すべてのデフォルトを未変更のままにします。前述のパネルのフィールドは、次のとおりです。

* *Wicketフィルタ名。* ``web.xml`` ファイルで定義されるフィルタの名前を示します。
* *Wicket URLパターン。* ``web.xml`` ファイルに相対URLパターンを追加します。
* *Wicketアプリケーション・クラス。*ホーム・ページなどのアプリケーション全体に関係する設定を設定するクラスの名前を指定します。
* *Wicketホーム・ページ。* ``xxx.java`` および ``xxx.html`` という名前のファイルで構成されるホーム・ページの名前を指定します。
* *メイン・パッケージ。*生成されたすべてのアーティファクトがIDEによって格納されるJavaパッケージ。
* *バージョン。*Wicketのバージョン。名前が"Wicket"で始まるライブラリ・マネージャ内のライブラリが前述の「バージョン」ドロップダウンにリストされます。プラグインに含まれているバージョンは1.6.0のため、デフォルトでリストされるバージョンは1.6.0のみです。


. 「終了」をクリックします。

IDEによって ``MyFirstWicketApp`` プロジェクトが作成されます。プロジェクトには、すべてのソースおよびプロジェクト・メタデータ(プロジェクトのAntビルド・スクリプトなど)が含まれます。IDEでプロジェクトが開きます。「プロジェクト」ウィンドウ([Ctrl]-[1])で、論理構造を表示できます。

image::https://blogs.oracle.com/geertjan_images/resource/wicket-160-nb-2.png[]


==== シナリオ2: MavenベースのWicketアプリケーションの一からの作成

すでにAntベースのアプリケーションがある場合、IDEを使用してWicketサポートを追加できます。

1. 「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」から「Maven」を選択します。「プロジェクト」で「Webアプリケーション」を選択します。

image::images/maven-1.png[]

「次」をクリックします。



. 「名前と場所」パネルで、「プロジェクト名」に「 ``MyFirstWicketApp`` 」と入力します。必要に応じてプロジェクトの場所とデフォルトのMaven設定を変更します。

image::images/maven-3.png[]

「次」をクリックします。



. ニーズに合う適切なサーバーを選択し、「Java EEバージョン」設定に「Java EE 6 Web」を選択します。

image::images/maven-4.png[]

「終了」をクリックします。IDEは、次に示すようなソース構造を作成します。

image::images/maven-5.png[]



. Java EE 6のサポートを追加したため、前述の手順で ``web.xml`` ファイルは作成されていません。しかし、WicketではWicketアプリケーション・フィルタを ``web.xml`` ファイルに登録する必要があります。したがって、先に進む前に ``web.xml`` ファイルをアプリケーションに追加します。

アプリケーションを右クリックし、「新規」>「その他」を選択し、続けて「Web」>「標準のデプロイメント・ディスクリプタ(web.xml)」を選択します。「次」をクリックし、「終了」をクリックします。



. これで、アプリケーションにWicketサポートを追加する準備ができました。プロジェクト・ノードを右クリックし、「プロパティ」を選択します。「プロジェクト・プロパティ」ダイアログで、「フレームワーク」を選択し、「Wicket」をクリックします。前の項の説明を使用して、ダイアログのWicket構成部分の詳細を指定します。「OK」をクリックします。

IDEによって、必要なWicketファイルがすべて作成されます。

image::images/maven-6.png[]


==== シナリオ3: MavenベースのWicketアプリケーションの原型からの作成

原型は、Wicketアプリケーションを設定するためのMavenリポジトリにあります。

1. 「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」から「Maven」を選択します。「プロジェクト」で、「原型からのプロジェクト」を選択します。

image::images/maven-7.png[]

「次」をクリックします。



. 「検索」フィールドに"wicket"と入力し、使用する原型を選択します。

image::images/maven-8.png[]

ニーズに合った値を使用してウィザードを完了します。「終了」をクリックします。

IDEによって、原型から作成されたアプリケーションにWicketサポートが追加されます。


==== シナリオ4: 既存のアプリケーションへのWicketサポートの追加

すでにアプリケーションがある場合、Antで作成されたか、Mavenで作成されたかに関係なく、IDEを使用してWicketサポートを追加できます。

1. アプリケーションを右クリックし、「プロパティ」を選択します。
2. 「プロジェクト・プロパティ」ダイアログで、「フレームワーク」パネルを選択し、「追加」を選択します。「Wicket」を選択します。「OK」をクリックします。
3. 前の項の説明を使用して、「フレームワーク」パネルでWicket構成を指定します。
4. 「OK」をクリックして続行します。

IDEによって、既存のアプリケーションにWicketサポートが追加されます。

次の項で、生成された各ファイルについて詳細に説明します。


=== Wicketの代替バージョンのサポートの提供

NetBeansプラグインに含まれているWicketのバージョンが、必要なバージョンでない場合があります。次の手順を実行し、Wicketの代替バージョンを登録して使用します。

1. 「ツール」|「Antライブラリ」に移動します。NetBeans Wicketプラグインで登録されたWicket JARが使用可能であることに注意してください。

image::images/maven-9.png[]



. 前述のダイアログで「新規ライブラリ」をクリックして、"Wicket"で始まる名前の新しいライブラリを作成します。JARをライブラリに追加します。つまり、希望のバージョンのWicketのJARを、作成したライブラリに登録します。


. 
次に新規のWebアプリケーションを作成する際、あるいは既存のアプリケーションにWicketサポートを追加する際、新たに登録したライブラリが("Wicket"で始まる名前であれば)「フレームワーク」パネルに表示されます。

image::images/maven-91.png[]

ウィザードを完了すると、選択したライブラリに登録されたJARが、アプリケーションのクラスパスに追加されます。

*注意: *前述の方法は、AntベースのWicketアプリケーションに適用されます。MavenベースのアプリケーションでWicketの代替バージョンを使用する場合は、関連するPOMファイルを変更します。


=== 生成されたWicketアプリケーションのソース構造の確認

IDEのWeb アプリケーション・ウィザードによって多数のファイルが作成されました。ここでは、各ファイルを確認し、各ファイルがWicket開発のコンテキスト内で互いにどのように関連しているかについて説明します。

1. 生成されたファイルのツアーを開始しましょう。

* *Webディスクリプタ。* ``web.xml`` ファイルの確認から始めます。これは、サーブレットの仕様に準拠した、すべてのWebアプリケーションに共通の一般的なデプロイメント・ディスクリプタです。「 ``WEB-INF`` 」フォルダまたは「構成ファイル」フォルダを展開し、ファイルをraw XMLビューで開きます。Wicketフィルタの定義に注意してください。


[source,xml]
----

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <filter>
        <filter-name>WicketApplication</filter-name>
        <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
        <init-param>
            <param-name>applicationClassName</param-name>
            <param-value>com.myapp.wicket.Application</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>WicketApplication</filter-name>
        <url-pattern>/wicket/*</url-pattern>
    </filter-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file/>
    </welcome-file-list>
</web-app>
----

*注意: *アプリケーション・クラス名の値は ``com.myapp.wicket.Application`` に設定されています。次のステップで、アプリケーション・クラス・ファイルを開き、その内容を確認します。

* *Wicketアプリケーション・クラス。*「ソース・パッケージ」フォルダの ``com.myapp.wicket`` パッケージを開き、  ``Application.java`` ファイルを開きます。次のようになっています。


[source,java]
----

package com.myapp.wicket;           

import org.apache.wicket.protocol.http.WebApplication;

public class Application extends WebApplication {

    public Application() {
    }

    @Override
    public Class getHomePage() {
        return HomePage.class;
    }

}
----

これは、Strutsフレームワークの ``struts-config.xml`` およびJSFフレームワークの ``faces-config.xml`` に相当する、アプリケーション全体に関係する設定を含むJavaファイルです。 ``getHomePage()`` メソッドの定義に注意してください。このメソッドは、アプリケーション全体に関係するクラスの最小要件です。アプリケーションをデプロイすると表示される最初のページ(ホーム・ページ)を指定します。 ``HomePage.class`` が返されることに注意してください。次のステップで、 ``HomePage.java`` ファイルを開き、その内容を確認します。

* *Wicketホーム・ページ。* ``HomePage.java`` を開きます。次のようになっています。


[source,java]
----

package com.myapp.wicket;           

public class HomePage extends BasePage {

    public HomePage() {
        add(new Label("message", "Hello, World!"));
    }

}
----

このファイルによってホーム・ページにラベルが追加されます。このファイルで作成されたWicketウィジェットのレンダリングは、同じソース構造内の同じ名前のファイルで行われます。このファイルは ``HomePage.html`` で、次のような内容です。


[source,xml]
----

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  
      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
      xml:lang="en"  
      lang="en"> 
    <head> 
        <wicket:head> 
            <title>Wicket Example</title> 
        </wicket:head> 
    </head> 
    <body> 
        <wicket:extend> 
            <h1 wicket:id="message">This gets replaced</h1>
        </wicket:extend> 
    </body> 
</html>
----

 ``HomePage.java`` で ``BasePage`` を拡張していることに注意してください。 ``HomePage.html`` には ``wicket:id`` 属性があり、これは、Javaファイルによってどこかで作成される何かのプレースホルダであることを示します。また、IDEで生成されるCSSスタイルシートへの参照もあります。これは、「プロジェクト」ウィンドウの「Webページ」フォルダで確認できます。次のステップで、 ``BasePage`` を開き、その内容を確認します。

* *ベース・ページ。* ``BasePage.java`` を開きます。これは、次のような内容です。


[source,java]
----

package com.myapp.wicket;           

import org.apache.wicket.markup.html.WebPage;

public abstract class BasePage extends WebPage {

    public BasePage() { 
        super(); 
        add(new HeaderPanel("headerpanel", "Welcome To Wicket")); 
        add(new FooterPanel("footerpanel", "Powered by Wicket and the NetBeans Wicket Plugin"));
    } 

}
----

これは、すべてのWebページで拡張するクラスです。 ``BasePage`` を拡張する各クラスは、 ``HeaderPanel`` および ``FooterPanel`` のインスタンスを継承します。これによって、すべてのWebページに同じヘッダーとフッターが含まれます。ベース・ページのHTML側は次のとおりです。


[source,xml]
----

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  
      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
      xml:lang="en"  
      lang="en"> 
    <head> 
        <wicket:head> 
            <wicket:link> 
                <link rel="stylesheet" type="text/css" href="style.css"/> 
            </wicket:link> 
        </wicket:head> 
    </head> 
    <body> 
        <header wicket:id="headerpanel" />
        <section class="content_container"> 
            <wicket:child/> 
        </section> 
        <footer wicket:id="footerpanel" /> 
    </body> 
</html>
----

次のステップで、 ``HeaderPanel.java`` を開き、その内容を確認します。

* *ヘッダー・パネル。* ``HeaderPanel.java`` を開きます。これは、次のような内容です。


[source,java]
----

package com.myapp.wicket;           

import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;

public class HeaderPanel extends Panel {

    public HeaderPanel(String componentName, String exampleTitle)
    {
        super(componentName);
        *add(new Label("exampleTitle", exampleTitle));*
    }

}
----

太字の行に注意してください。ここでは、Wicket Labelウィジェットを作成しています。HeaderPanelは、再利用可能なコンポーネントです。これはJava側で、ウィジェットが作成されます。次にHTML側を見てみます。ここで、Wicket Labelウィジェットがレンダリングされます。次のステップで、 ``HeaderPanel.html`` ファイルを開き、その内容を確認します。

ここで、2つ目の引数を"My Very First Component Based Application"に変更します。Labelの定義は次のようになります。


[source,java]
----

add(new Label("exampleTitle", "My Very First Component Based Application"));
----

 ``HeaderPanel.html`` を開きます。先ほど確認したJavaファイルと同じ名前であることに注意してください。同じパッケージ構造内にあります。これは、次のような内容です。


[source,xml]
----

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  
      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
      xml:lang="en"  
      lang="en"> 
    <head><title>Wicket Example</title></head>
    <body>
        <wicket:panel>
            <h1>Wicket Example</h1>
            <p id="titleblock">
                <b><font size="+1">Start of <span wicket:id="exampleTitle">Example Title Goes Here</span></font></b>
            </p>
        </wicket:panel>
    </body>
</html>
----

太字の行に注意してください。これがWebページのHTML側でウィジェットのレンダリング場所を指定する方法です。[Ctrl]キーを押したまま、 ``span`` タグ内の ``wicket:id`` 属性の値の上にマウスを移動します。値がハイパーリンクに変わることに注意してください。

image::images/hyperlink-1.png[]

ハイパーリンクをクリックすると、WebページのJava側が開くことに注意してください。

ソース・エディタの上部にある左矢印をクリックしてHTMLページに戻ります。

image::images/hyperlink-2.png[]

このようにして、Wicketコンポーネントの2つの側の間を迅速かつ効率的に移動できます。

* *フッター・パネル。*フッター・パネルの構造は、前述のヘッダー・パネルと同じです。


. 
プロジェクトを右クリックし、実行します。IDEでアプリケーションがコンパイルされ、WARファイルが作成されてデプロイメント・サーバーに送信されます。IDEのデフォルト・ブラウザが開き、アプリケーションが表示されます。

image::images/deploy-1.png[]

*注意: *上に示されているようにURLに"/wicket"が追加されていることに注意してください。これによって、 ``web.xml`` ファイル内に登録されているWicketフィルタにURLがマップされます。



== Wicketの機能の使用

以降の項では、Wicketの3つの主な機能およびNetBeans Wicketプラグインを介したNetBeans IDEによるそのサポートについて学習します。

* <<widget,ウィジェット>>
* <<component,再利用可能なコンポーネント>>
* <<ajax,AJAXサポート>>

以降の項では、NetBeans Wicketプラグインによって使用可能になる様々なサポート機能も紹介します。


=== ウィジェットの追加

この項では、Wicketで最初のウィジェットを作成します。他のアーティファクト同様、ウィジェットにはJava側とHTML側があります。Java側でウィジェットが作成されます。HTML側でレンダリングされます。前述のとおり、2つの側の間の移動はハイパーリンクを介して行われます。

1.  ``HomePage.html`` を開きます。パレットが自動的に開かない場合、「ウィンドウ」>「パレット」([Ctrl]-[Shift]-[8])で開きます。

image::images/widget-2.png[]



. HTMLファイルのH1要素の下に1行追加した後、パレットから「ラベル」アイテムをドラッグし、H1要素の下にドロップします。次のダイアログが表示されます。

image::images/widget-3.png[]

ダイアログ内の値を次のように変更します。

image::images/widget-4.png[]

「OK」をクリックします。次の太字のタグがファイルに追加されていることに注意してください。


[source,xml]
----

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  
      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
      xml:lang="en"  
      lang="en"> 
    <head> 
        <wicket:head> 
            <title>Wicket Example</title> 
        </wicket:head> 
    </head> 
    <body> 
        <wicket:extend> 
            <h1 wicket:id="message">This gets replaced</h1>
            *<span wicket:id="message1">This gets replaced</span>*
        </wicket:extend> 
    </body> 
</html>
----

新たに追加したウィジェットにスタイルを設定できます。たとえば、H3タグを使用します。


[source,xml]
----

<h3 wicket:id="message1">This gets replaced</h3>
----

次に、 ``HomePage.java`` を開きます。HTMLファイル内の識別子と同じ識別子のラベルが追加されていることに注意してください(*太字*部分の変更箇所)。


[source,java]
----

public class HomePage extends BasePage {

    public HomePage() {
        add(new Label("message", "Hello, World!"));
        *add(new Label("message1", "Hello again, World!"));*
    }

}
----


. 
ファイルを保存します。ブラウザをリフレッシュすると、 ``HomePage.html`` でレンダリングされるWicket Labelを確認できます。

image::images/deploy-2.png[]

 ``HomePage.html`` ファイルでタグを作成したようにプレースホルダを作成し、HTMLファイルをWebデザイナに渡すことができます。WebデザイナはWebページを設計しますが、それとは独立してJava側の作業をし、ウィジェットを作成することができます。HTMLタグはJavaファイルに埋め込まれないため、Webデザイナとの間でWicketの特色である「関心の分離」を最大限に活用することができます。

前述のHTMLファイルをエディタで選択したままナビゲータを開くと(「ウィンドウ」>「ナビゲート」>「ナビゲータ」)、ナビゲータの"Wicket Tags"リストにタグの概要が表示されます。

image::images/wicket-navigator.png[]

対応するHTMLページに対応するタグがない場合、Javaファイルにエラー・メッセージが表示されます。

image::images/widget-1.png[]


=== 再利用可能なコンポーネントの追加

Wicketの長所の1つが、再利用可能なコンポーネントの概念です。この項では、ウィザードを使用してパネルを生成します。繰り返しになりますが、パネルには、Java側とHTML側があります。パネルを作成して、Webページで再利用するバナーを含めます。これによってWebサイトでバナーが異なることがなくなります。Webページへのパネルの追加が簡単がことがわかります。

1.  ``com.myapp.wicket`` パッケージ・ノードを右クリックし、「新規」>「その他」を選択します。「カテゴリ」で「Web」を選択します。「ファイル・タイプ」で、次のテンプレートに注意してください。

image::images/panel-1.png[]

「Wicketパネル」を選択し、「次」をクリックします。



. 「ファイル名」に「 ``BannerPanel`` 」と入力します。次のようになります。

image::images/panel-2.png[]

「終了」をクリックします。

パッケージに ``BannerPanel.html`` および ``BannerPanel.java`` という2つの新しいファイルがあることに注意してください。



.  ``BannerPanel.html`` を開き、ファイルの内容が次のようになっていることを確認します。


[source,xml]
----

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:wicket>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>BannerPanel</title>
    </head>
    <body>
        <wicket:panel>
            <!-- TODO - add components here, ala
            
            <span wicket:id="title">title here</span>
            
            -->
        </wicket:panel>
    </body>
</html
----

 ``wicket:panel`` タグの間にWicketプレースホルダがあります。Spanタグの上および下の行を削除します。この結果、SPANタグの行がコメントアウトされなくなります。[Ctrl]キーを押したまま、Wicket IDの値の上にマウスを移動し、表示されたハイパーリンクをクリックします。 ``BannerPanel.java`` ファイルが開きます。


[source,java]
----

package com.myapp.wicket;

import org.apache.wicket.markup.html.panel.Panel;

public final class BannerPanel extends Panel {
    BannerPanel(String id) {
        super (id);
    }
}
----

先ほど ``HomePage.java`` ファイルに行ったように、次に太字で示したラベルを追加します。


[source,java]
----

package com.myapp.wicket;

*import org.apache.wicket.markup.html.basic.Label;*
import org.apache.wicket.markup.html.panel.Panel;

public final class BannerPanel extends Panel {
    BannerPanel(String id) {
        super (id);
        *add(new Label("title","I am a reusable component!"));*
    }
}
----


. 単純ですが、これでパネルは完成です。ホーム・ページに追加しましょう。 ``HomePage.java`` を開き、次の行をコンストラクタの最後に追加して、BannerPanelの新しいインスタンスを作成します。


[source,java]
----

add(new BannerPanel("bannerPanel"));
----


. 次に、パネルをレンダリングする必要があります。 ``HomePage.html`` を開き、終了のBODYタグの直前にプレースホルダ・タグを追加します。Javaファイルで使用されているのと同じWicket識別子を必ず使用してください。


[source,java]
----

<span wicket:id='bannerPanel'/>
----


. 
プロジェクトを再実行します。HTMLファイルで指定された場所にパネルが表示されていることに注意してください。

image::images/result-3.png[]

Wicketでは、パネルは再利用可能なコンポーネントです。この項で示したように、パネルは何度でも、どのWebページにも再利用できます。


=== AJAX機能の追加

JavaScriptを使用して(link:http://en.wikipedia.org/wiki/Ajax_(programming)[+AJAXテクノロジ+]を介した)非同期のWeb機能をWicketアプリケーションに追加するかわりに、Wicketで、AJAX機能をカプセル化するJavaコンポーネント・モデルを使用可能にします。次に、これより前に作成したラベル・ウィジェットのかわりに、AJAXのオートコンプリート・ウィジェットを含むようBannerPanelを変更する方法を示します。

1.  ``BannerPanel`` クラスのHTML側で、次に示すように、パレットからAJAXテキスト入力アイテム([Ctrl]-[Shift]-[8])をドラッグします。

image::images/drag-1.png[]

次に示すように、既存のWicketプレースホルダの下にアイテムをドロップします。


[source,xml]
----

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:wicket>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>BannerPanel</title>
    </head>

    <body>
        
        <wicket:panel>

            <span wicket:id="title">title here</span>

            *<input type="text" wicket:id="countries" size="50"/>*

        </wicket:panel>

    </body>
    
</html>
----


. 対応するJava側で、次のコードが自動的に追加されていることに注意してください。


[source,java]
----

final AutoCompleteTextField field = new AutoCompleteTextField("countries", new Model("")) {
    @Override
    protected Iterator getChoices(String input) {
        if (Strings.isEmpty(input)) {
            return Collections.EMPTY_LIST.iterator();
        }
        List choices = new ArrayList(10);
        Locale[] locales = Locale.getAvailableLocales();
        for (int i = 0; i < locales.length; i++) {
            final Locale locale = locales[i];
            final String country = locale.getDisplayCountry();
            if (country.toUpperCase().startsWith(input.toUpperCase())) {
                choices.add(country);
                if (choices.size() == 10) {
                    break;
                }
            }
        }
        return choices.iterator();
    }
};
----


. [Ctrl]-[Shift]-[I]を押します。正しいインポート文を必ず選択します。

image::images/imports-1.png[]

「OK」をクリックし、 `` BannerPanel`` クラスで次のインポート文を使用していることを確認してください。


[source,java]
----

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.util.string.Strings;
----


. 
ブラウザを再度リフレッシュすると、AJAXのオートコンプリート・フィールドが表示されます。入力すると、このフィールドに、入力したテキストに一致する国が表示されます。

image::images/result-4.png[]


== 次の手順

これで、NetBeans IDEでのWicketの開発の概要を終了します。David R. Heffelfinger氏によるlink:http://www.ensode.net/wicket_first_look.html[+A First Look at the Wicket Framework+]で説明されているPizzaアプリケーション・サンプルを利用して、Wicketフレームワークの理解を深めてください。ここで示したように、チュートリアルの結果が、他のサンプル同様、新規プロジェクト・ウィザードで使用可能であることに注意してください。

image::images/samples.png[] 

link:/about/contact_form.html?to=3&subject=Feedback: Introduction to the Wicket Framework in 7.2[+ご意見をお寄せください+]



== 関連項目

関連するチュートリアルまたはより高度なチュートリアルとしては、次のリソースを参照してください。

* link:../../docs/web/quickstart-webapps.html[+Webアプリケーション開発入門+]
* link:../../docs/web/quickstart-webapps-struts.html[+Struts Webフレームワーク入門+]
* link:quickstart-webapps-spring.html[+Spring Webフレームワーク入門+]
