- 我们从 web.xml 文件开始,该文件是所有 web 应用程序的通用常规部署描述符,它遵守 Servlet 规范。展开 WEB-INF 文件夹或者 Configuration Files 文件夹,以原始 XML 视图方式打开文件,注意 servlet 的定义:
<servlet-name>WicketApplication</servlet-name>
<servlet>
<servlet-name>WicketApplication</servlet-name>
<servlet-class>org.apache.wicket.protocol.http.WicketServlet</servlet-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>com.myapp.wicket.WicketApplication</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>WicketApplication</servlet-name>
<url-pattern>/wicket/*</url-pattern>
</servlet-mapping>
注意应用程序类名称的值。在下一步骤中,我们将打开应用程序类文件并查看其内容。
- 打开 Source Package 文件夹中的 com.myapp.wicket 包,然后打开 WicketApplication.java 文件。文件内容如下所示
package com.myapp.wicket;
import org.apache.wicket.protocol.http.WebApplication;
public class WicketApplication extends WebApplication {
public WicketApplication() {
}
public Class getHomePage() {
return Home.class;
}
}
这是提供应用程序范围设置的 Java 文件,类似于 Struts 框架中的 struts-config.xml或者 JSF 框架中的 faces-config.xml。注意 getHomePage() 方法的定义。此方法是应用程序范围类的最小需求。它指定了在部署应用程序时将被展示的第一页(主页)。注意 Home.class 会被返回。在下一步骤中,我们将打开 Home.java 文件查看其内容。
- 打开 Home.java 文件。文件内容如下所示:
package com.myapp.wicket;
public class Home extends WicketExamplePage {
public Home() {
}
}
该文件是空的。呈现此文件中创建的 Wicket 窗口小部件的是同一源结构中的同名文件,它只能是 Home.html,它通常看起来如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<link rel='stylesheet' type='text/css' href='style.css'/>
</head>
<body>
<span wicket:id='mainNavigation'/>
</body>
</html>
注意在 Home.java 中,我们正在展开 WicketExamplePage。在 Home.html 中有一个 wicket:id 属性,它告诉我们这是某个 Java 文件在某处所创建内容的占位符。并且,我们也会和 IDE 为我们创建的 CSS 样式表相关联。您可以在 Web Pages 文件夹中的 Projects 窗口发现它。在下一步骤中,我们会打开 WicketExamplePage 并检查其内容。
- 打开 WicketExamplePage.java 文件。文件内容如下所示:
package com.myapp.wicket;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.string.Strings;
public class WicketExamplePage extends WebPage {
public WicketExamplePage() {
this(null);
}
public WicketExamplePage(IModel model) {
super(model);
final String packageName = getClass().getPackage().getName();
add(new WicketExampleHeader("mainNavigation", Strings.afterLast(packageName, '.')));
}
}
这就是我们希望所有的 web 页都进行扩展的类。例如,注意上面的粗体字行。每一个扩展 WicketExamplePage 的类都将继承一个 WicketExampleHeader 实例。Wicket ID 为“mainNavigation”,它就是我们在上一个步骤的 Home.html 文件中看到的 Wicket ID。我们可以在所有 HTML 页面的顶部引用“mainNavigation” Wicket ID。这确保了我们所有的 web 页面都拥有相同的标题。在下一步骤中,我们将打开 WicketExampleHeader.java 并查看其内容。
- 打开 WicketExampleHeader.java 文件。文件内容如下所示:
package com.myapp.wicket;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
public class WicketExampleHeader extends Panel {
public WicketExampleHeader(String componentName, String exampleTitle)
{
super(componentName);
add(new Label("exampleTitle", exampleTitle));
}
}
注意上面的粗体字行。这里,我们创建一个 Wicket Label 窗口小部件。WicketExampleHeader 是一个可重用组件。这是 Java 端,创建窗口小部件的地方。让我们来看 HTML 端,即我们期望 Wicket Label 窗口小部件被呈现的一端。在下一步骤中,我们将打开 WicketExampleHeader.html 文件查看其内容。
现在将第二参数更改为“My Very First Component Based Applicaion”,从而使 Label 的定义变为:
add(new Label("exampleTitle", "My Very First Component Based Application"));
- Open 打开 WicketExampleHeader.html 文件。注意它与我们刚才介绍的 Java 文件同名。您可以在同一个包结构下找到它。文件内容如下所示:
<html xmlns:wicket>
<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 属性的值上。注意此值会变成一个超链接:

单击超链接,注意 web 页面的 Java 端会打开,并且指针会落在 Wicket 标识符的起始引号的左侧:

现在单击 Source Editor 顶部的左箭头返回 HTML 页面。用这种方法,您可以在 Wicket 组件的两端之间快速高效地导航。
- 右键单击项目并选择 Run Project 选项。IDE 会编译应用程序,创建一个 WAR 文件,将它发送到部署服务器,打开 IDE 的默认浏览器,并显示应用程序。
