// 
//     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 配置文件。使用 Java 类进行应用程序范围的设置（例如主页标识），而不使用 XML 配置文件。

在 Java 类中创建 Web 应用程序中的每个窗口部件并将其呈现在 HTML 页中。Java 类和 HTML 页必须具有相同的名称且存在于相同的源结构中。它们通过 Wicket 标识符彼此链接。将向您演示 IDE 如何支持 Wicket 应用程序开发，以便您可以快速有效地创建可重用组件，这样您无需执行太多操作即可生成外观一致的 Web 应用程序。


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 开发工具包 (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 Servlet 容器 |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，请转到 "Plugin Manager"（插件管理器）（从主菜单中选择 "Tools"（工具）> "Plugins"（插件）），然后在 "Downloaded"（已下载）标签下安装该插件。有关如何将框架插件安装到 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 servlet 注册，以及一些标准工件，例如应用程序类和主页。由于我们使用的是 IDE，因此应该不需要手动创建所有这些文件。而我们可以通过向导来执行操作。

根据您的需求，选择以下某个适当的方案：

* <<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. 选择 "File"（文件）> "New Project"（新建项目）。在 "Categories"（类别）下，选择 "Web"。在 "Projects"（项目）下，选择 "Web Application"（Web 应用程序）。单击 "Next"（下一步）。
2. 在 "Name and Location"（名称和位置）面板的 "Project Name"（项目名称）中，键入  ``MyFirstWicketApp`` 。将项目位置更改为计算机上的任意目录。单击 "Next"（下一步）。
3. 保留所有设置不变。您也可以根据需要更改它们。Wicket 支持任何版本的 Java EE。可以将 Wicket 应用程序部署到任何服务器。单击 "Next"（下一步）。
4. 
在 "Frameworks"（框架）面板中，选择 "Wicket"，如下所示：

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

*注：*根据安装到 IDE 的模块不同，您可能会在以上屏幕快照所示的 "Frameworks"（框架）列表中看到更多或更少的项。

在以上所示的面板中，保留所有默认值不变。以上面板提供以下字段：

* *Wicket Filter Name*（Wicket 过滤器名称）。显示将在  ``web.xml``  文件中定义的过滤器的名称。
* *Wicket URL Pattern*（Wicket URL 模式）。将相对 URL 模式添加到  ``web.xml``  文件中。
* *Wicket Application Class*（Wicket 应用程序类）。指定设置应用程序范围设置（例如主页）的类的名称。
* *Wicket Home Page*（Wicket 主页）。指定将包含称为  ``xxx.java``  和  ``xxx.html``  的文件的主页名称。
* *Main Package*（主包）。IDE 将生成的所有工件放入的 Java 包。
* *Version*（版本）。Wicket 版本。以上 "Version"（版本）下拉列表中将列出库管理器中名称以 "Wicket" 开头的所有库。默认情况下，唯一列出的版本是 1.6.0，因为这是插件所提供的版本。


. 单击 "Finish"（完成）。

IDE 将创建  ``MyFirstWicketApp ``  项目。此项目包含所有源代码和项目元数据，例如项目的 Ant 构建脚本。此项目在 IDE 中打开。可以在 "Projects"（项目）窗口（Ctrl-1 组合键）中查看其逻辑结构：

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


==== 方案 2：从头开始创建基于 Maven 的 Wicket 应用程序

当您已有一个基于 Ant 的应用程序时，IDE 可帮助您添加 Wicket 支持。

1. 选择 "File"（文件）> "New Project"（新建项目）。在 "Categories"（类别）下，选择 "Maven"。在 "Projects"（项目）下，选择 "Web Application"（Web 应用程序）。

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

单击 "Next"（下一步）。



. 在 "Name and Location"（名称和位置）面板的 "Project Name"（项目名称）中，键入  ``MyFirstWicketApp`` 。根据您的需求更改 "Project Location"（项目位置）和默认 Maven 设置。

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

单击 "Next"（下一步）。



. 根据您的需求选择适当的服务器，并选择 "Java EE 6 Web" 作为 "Java EE Version"（Java EE 版本）设置。

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

单击 "Finish"（完成）。IDE 将创建下面显示的源代码结构：

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



. 因为我们已添加对 Java EE 6 的支持，所以上一步中未创建  ``web.xml``  文件。但是，Wicket 要求在  ``web.xml``  文件中注册 Wicket 应用程序过滤器。因此，我们将在应用程序中添加新的  ``web.xml``  文件，然后继续。

右键单击应用程序，选择 "New"（新建）> "Other"（其他），然后选择 "Web" > "Standard Deployment Descriptor"（标准部署描述符）(web.xml)。单击 "Next"（下一步），然后单击 "Finish"（完成）。



. 此时我们即可将 Wicket 支持添加到应用程序中。右键单击项目节点，然后选择 "Properties"（属性）。在 "Project Properties"（项目属性）对话框中，选择 "Frameworks"（框架），然后单击 "Wicket"。使用前几部分中的描述在此对话框的 "Wicket Configuration"（Wicket 配置）部分中填写详细信息。单击 "OK"（确定）。

IDE 将创建入门所需的所有 Wicket 文件：

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


==== 方案 3：根据原型创建基于 Maven 的 Wicket 应用程序

原型存在于 Maven 资源库中，用于设置 Wicket 应用程序。

1. 选择 "File"（文件）> "New Project"（新建项目）。在 "Categories"（类别）下，选择 "Maven"。在 "Projects"（项目）下，选择 "Project from Archetype"（基于原型的项目）。

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

单击 "Next"（下一步）。



. 在 "Search"（搜索）字段中，键入 "wicket"，然后选择要使用的原型。

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

根据您的需求使用适当的值完成向导。单击 "Finish"（完成）。

IDE 将向根据原型创建的应用程序中添加 Wicket 支持。


==== 方案 4：将 Wicket 支持添加到现有应用程序中

当您已有一个应用程序（无论是基于 Ant 还是基于 Maven 创建的）时，IDE 可帮助您添加 Wicket 支持。

1. 右键单击应用程序，然后选择 "Properties"（属性）。
2. 在 "Project Properties"（项目属性）对话框中，选择 "Frameworks"（框架）面板，然后单击 "Add"（添加）。然后选择 "Wicket"。单击 "OK"（确定）。
3. 使用上一部分中的描述在 "Frameworks"（框架）面板中填写 "Wicket Configuration"（Wicket 配置）。
4. 单击确定以进行确认。

IDE 将向现有应用程序中添加 Wicket 支持。

在下一部分，我们将详细了解生成的每个文件。


=== 提供对 Wicket 的替代版本的支持

NetBeans Wicket 插件中包含的 Wicket 版本可能不是您需要的版本。执行以下步骤以注册和使用 Wicket 的替代版本。

1. 转到 "Tools"（工具）| "Ant Libraries"（Ant 库）。请注意，NetBeans Wicket 插件所注册的 Wicket JAR 可用：

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



. 在上面显示的对话框中，单击 "New Library"（新建库），使用以 "Wicket" 开头的名称创建一个新库。将 JAR 添加到该库中，即，将 Wicket 的首选版本的 JAR 注册到您已创建的库中。


. 
当您接下来创建新的 Web 应用程序时，或将 Wicket 支持添加到现有应用程序中时，"Frameworks"（框架）面板将显示新注册的库（如果其名称以 "Wicket" 一词开头）：

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

完成向导后，在所选库中注册的 JAR 将放在应用程序的类路径上。

*注：*以上方法适用于基于 Ant 的 Wicket 应用程序。如果要在基于 Maven 的应用程序中使用 Wicket 的替代版本，请更改相关的 POM 文件。


=== 检查生成的 Wicket 应用程序的源代码结构

IDE 的 Web 应用程序向导已经为我们创建了许多文件。在此可查看这些文件并了解这些文件在 Wicket 开发的上下文内是如何彼此相关的。

1. 让我们开始了解生成的文件。

* *Web Descriptor*（Web 描述符）。首先查看  ``web.xml``  文件，该文件是符合 Servlet 规范的所有 Web 应用程序通用的一般部署描述符。展开  ``WEB-INF``  文件夹或 "Configuration Files"（配置文件）文件夹，在原始 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 Application Class*（Wicket 应用程序类）。打开 "Source Packages"（源包）文件夹中的  ``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;
    }

}
----

这是提供应用程序范围设置的 Java 文件，可比较于 Struts 框架中的  ``struts-config.xml``  和 JSF 框架中的  ``faces-config.xml`` 。注意  ``getHomePage()``  方法的定义。此方法是应用程序范围类的最低要求。它指定部署应用程序时将显示的第一页（主页）。请注意，返回了  ``HomePage.class`` 。在下一步中，我们将打开  ``HomePage.java``  文件并检查其内容。

* *Wicket Home Page*（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 样式表。您可以在 "Projects"（项目）窗口的 "Web Pages"（Web 页）文件夹中找到该样式表。在下一步中，我们将打开  ``BasePage``  并检查其内容。

* *Base Page*（基本页）。打开  ``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``  并检查其内容。

* *Header Panel*（页眉面板）。打开  ``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 标签窗口部件。HeaderPanel 是可重用组件。这是创建了窗口部件的 Java 端。接下来，我们将查看预期呈现 Wicket 标签窗口部件的 HTML 端。在下一步中，我们将打开  ``HeaderPanel.html``  文件并检查其内容。

现在，将第二个参数更改为 "My Very First Component Based Application"，以使标签的定义此时如下所示：


[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[]

单击该超链接，此时注意将打开 Java 端的 Web 页。

现在，单击源代码编辑器顶部的左箭头以返回到 HTML 页：

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

通过这种方式，可以在 Wicket 组件的两端之间快速有效地导航。

* *Footer Panel*（页脚面板）。页脚面板的结构与页眉面板相同，如上所示。


. 
右键单击项目并运行该项目。IDE 将编译应用程序，创建 WAR 文件，将该文件发送到部署服务器，打开 IDE 的默认浏览器，并显示应用程序：

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

*注：*确保将 "/wicket" 附加到 URL（如上所示），以便将 URL 映射到  ``web.xml``  文件中注册的 Wicket 过滤器。



== 使用 Wicket 功能

在下面各个部分，您将了解三个关键的 Wicket 功能以及 NetBeans IDE 如何通过 NetBeans Wicket 插件支持这些功能：

* <<widget,窗口部件>>
* <<component,可重用组件>>
* <<ajax,AJAX 支持>>

下面各个部分还向您介绍了 NetBeans Wicket 插件提供的各种支持的功能。


=== 添加窗口部件

在此部分，我们将在 Wicket 中创建第一个窗口部件。就像 Wicket 中的其他大多数工件一样，窗口部件具有一个 Java 端和一个 HTML 端。在 Java 端创建窗口部件。在 HTML 端呈现窗口部件。如上所示，可通过超链接在两端之间导航。

1. 打开  ``HomePage.html`` 。如果 "Palette"（组件面板）未自动打开，请通过 "Window"（窗口）> "Palette"（组件面板）（Ctrl-Shift-8 组合键）将其打开。

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



. 在 HTML 文件中的 H1 元素下方添加一行之后，将 "Label"（标签）项从 "Palette"（组件面板）拖放到 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 标签：

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

您可以创建占位符（就像在上面的  ``HomePage.html``  文件中创建的标记一样），然后将 HTML 文件传递给 Web 设计者。当 Web 设计者设计 Web 页时，您可以在 Java 端完全独立地创建窗口部件。由于 HTML 标记未嵌入到 Java 文件中，因此您和 Web 设计者可以实现 Wicket 中心焦点的“关注分离”。

打开 "Navigator"（导航器）（"Window"（窗口）> "Navigating"（导航）> "Navigator"（导航器）），同时在编辑器中选定以上 HTML 文件，然后您即可查看导航器 "Wicket Tags"（Wicket 标记）列表中的标记概览：

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

如果匹配的 HTML 页中不存在匹配的标记，您将会在 Java 文件中看到错误消息：

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


=== 添加可重用组件

“可重用组件”概念是 Wicket 的优势之一。在此部分，我们将使用向导生成一个面板，该面板再次具有 Java 端和 HTML 端。我们将创建该面板，以便在 Web 页上重用我们具有的标帜，这样该标帜就会在 Web 站点之间保持一致。我们会看到将面板添加到 Web 页中是多么容易。

1. 右键单击  ``com.myapp.wicket``  包节点，然后选择 "New"（新建）> "Other"（其他）。在 "Categories"（类别）下，选择 "Web"。在 "File Types"（文件类型）下，注意以下模板：

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

选择 "Wicket Panel"（Wicket 面板）并单击 "Next"（下一步）。



. 在 "File Name"（文件名）中键入  ``BannerPanel`` 。您现在应该看到下面的屏幕：

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

单击 "Finish"（完成）。

请注意，我们的包中现在包含  ``BannerPanel.html``  和  ``BannerPanel.java``  这两个新文件。



. 打开  ``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 将异步 Web 功能（通过 link:http://en.wikipedia.org/wiki/Ajax_(programming)[+AJAX 技术+]）添加到 Wicket 应用程序中，Wicket 提供了一个封装 AJAX 功能的 Java 组件模型。下面，将向您演示如何更改 BannerPanel 以包含 AJAX 自动完成窗口部件，而不是之前创建的标签窗口部件。

1. 在  ``BannerPanel``  类的 HTML 端，从 "Palette"（组件面板）拖动 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 组合键，然后确保选择正确的 import 语句：

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

单击 "OK"（确定），然后确保  ``BannerPanel``  类使用以下 import 语句：


[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[+Wicket 框架入门+]中描述的 Pizza 应用程序样例，继续了解 Wicket 框架。请注意，本教程的结果作为样例与其他样例一起在 "New Project"（新建项目）向导中提供，如下所示：

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 框架简介+]
