Wicket用户手册一:Hello World

第一个程序

接下来要做的程序就是那个人人耳熟能祥的"Hello World"(译注 :姜还是老的辣,原来外国人也好这一口 )。这个程序将给客户端输出一个简单的页面,页面上只显示"Hello,World"这个字符串。第二个程序中,允许用户在浏览器端进行输入,然后根据输入再在页面上给出相应的输出信息,不过那是后话。

这个程序将在浏览器输出以下HTML:

 <html>   <body>       Hello, world!   </body> </html>  
模板HTML

麻雀虽小,五脏俱全,程序尽管简单,但一样不少。在这个程序中,我们使用Wicket提供的一个叫做"Label"的控件来输出"Hello,World"这个字符串。这个程序包括两方面内容:

HTML页面模板  Label控件 Wicket程序的开发步骤

考虑到简化程序的开发,易于理解,所以在这个例子中没有使用样式表或其它HTML元素,开发人员可以根据自己的需要加入CSS样式表,也可以使用JavaScript。但对于我们的第一个Wicket程序,我们尽量的省略掉这些元素。

模板中有部分内容只是用来给设计人员看的(译注:因为设计人员一般都使用可视化设计工具,如果都为空,或者使用标签,设计人员就无法查看直接效果,这也是Wicket的一个优点),以便理解模板文件( 译注:如Message goes here,设计人员或者开发人员也可以在这个地方加上注释,便于理解),因为这些内容在最终输出到浏览器时会自动省略到这些内容,所以不会影响最终客户的浏览内容。为了让Wicket框架能正确的输出内容,你必须告诉Wicket框架,哪些控件是需要动态输出信息。接下来会告诉如何使用Label控件,以及在Wicket中如何定义这样一个控件。

<html>  <body>      <span wicket:id="message">Message goes here</span>  </body></html>  

我们使用HTML中的span元素,并加入wicket:id属性将自己标记为一个需要Wicket处理的控件(译注:其实也可以使用 其它方式来指定一个Wicket控件,如id="wicket-message"等,以后会有相关的文档专门讨论这个问题)。

仅有这样一个HTML模板还不足以输出我们的"Hello,World",我们仍然需要有一个Java对象来告诉Wicket如何输出这些信息,以及所要输出的信息。接下来我们将要编写这段Java代码。

Java代码

开发一个Wicket程序,需要完成两个任务,编写一个模板文件,另外再写一个Java类负责控件的输出。在这个例子中,我们只需要负责控制一个Label控件来输出"Hello,World"。

首先我们要写一个继承WebPage的类,以便负责控件的输出。在Wicket中,所有的的Web页面都继承WebPage这个类,Wicke使用规则匹配方式在模板文件和类自动进行,比如说对于com.wicket.demo.hello.IndexPage这个类,Wicket会自动在com.wicket.demo.hello这个包下面查找IndexPage.html这个HTML文件自动进行匹配。(译注:用户可以定制这个规则,我会在以后的文章里进行描述),这样做对于初学者而言可能有点奇怪。不过基于规则的东西,其实要比使用XML文件更容易理解,也容易维护(译注:象我现在对这种规则习惯了,在大街上看到美女,就习惯性的在她身边找她男朋友,如果没有,咱就给她配置一个)。这样实现了HTML和Java的分离,对于这样一个基于控件开发的框架而言,这样可以实现更好的控件的复用(也有利于设计人员和开发人员的分工)。

import wicket.markup.html.WebPage;import wicket.markup.html.basic.Label;public class HelloWorld extends WebPage{  public HelloWorld()  {    add(new Label("message", "Hello World!"));  }}  

当你添加一个控件时候,与普通的桌面程序有一点不同,那就是你需要以字符串的方式来指定一个ID号,用作唯一标识,Wicket就根据这个ID号将模板文件中的控件与Java文件中的控件进行匹配。因为要和HTML模板文件中的wicket:id对应,所以不能重复。

当Wicket处理页面,进行输出的时候,就会根据这个ID号在类查找相应的控件,并将输出的内容来替换模板中相同ID号指定控件的输出内容。就象上面指定了一个ID号为"message"的Label控件,并将Label控件输出的内容(即"Hello,World")替换原有的内容(即"Message goes here")。

<span wicket:id="message">Message goes here</span>  

除了一个标识身份的ID号以外,控件还必须有一个Model,至于使用什么样的Model,就由控件自己(也可以由程序员)决定。在上面例子中,Model的内容(即字符串"Hello World")用来替换span标签中的值。如果要定制自己的Model,就必须实现wicket.model.IModel接口。大部分的控件都中提供了使用Model参数的构造函数。至于Label控件,则提供了使用字符串的构造函数,其实在构造函数内部,Label仍然将字符串转换成了一个简单的Model.

通常Model用来为控件提供灵活性,也就是说控件只处理显示内容,而Model就可以通过各种方式来提供所要显示的内容,这样减少了控件的变化,从而有利于控件的开发,维护 和使用 。

如果要运行这个程序,我们仍然还需要完成一个Application对象,这个Application对象在系统中主要管理配置,这个类的代码将如下所示:

package mypackage;import wicket.protocol.http.WebApplication;public class HelloWorldApplication extends WebApplication{    public HelloWorldApplication()    {        getPages().setHomePage(HelloWorld.class);    }}  
使用web.xml配置Web程序

为了能够让Java服务器能够运行你的程序,你需要通过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><servlet>  <servlet-name>HelloWorldApplication</servlet-name>    <servlet-class>wicket.protocol.http.WicketServlet</servlet-class>    <init-param>      <param-name>applicationClassName</param-name>      <param-value>mypackage.HelloWorldApplication</param-value>    </init-param>    <load-on-startup>1</load-on-startup></servlet><servlet-mapping>  <servlet-name>HelloWorldApplication</servlet-name>  <url-pattern>/helloworld/*</url-pattern></servlet-mapping></web-app>  

现在你就可以尝试运行你的第一个Wicket程序了。如果有问题,可以在文章下面提出问题,我会尽量回答。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 1.简介 2.如何使用示例代码 3.我为什么要学习Wicket? 3.1。我们都喜欢意大利面:-) ... 3.2。面向组件的框架 - 概述 3.3。面向组件的Web开发框架的优点 3.4。Wicket与其他面向组件的框架相比 威克特说“你好世界!” 4.1。Wicket分发和模块 4.2。Wicket应用程序的配置 4.3。HomePage类 4.4。Wicket链接 4.5。摘要 5. Wicket作为页面布局管理器 5.1。页眉,页脚,左侧菜单,内容等... 5.2。这是继承! 5.3。划分et impera! 5.4。使用wicket标记继承:扩展标记 5.5。摘要 6.保持对HTML的控制 6.1。隐藏或禁用组件 6.2。修改标签属性 6.3。生成标记属性“id” 6.4。使用WebMarkupContainer创建内嵌面板 6.5。使用标记片段 6.6。将标题内容添加到最终页面 6.7。在我们的页面/面板中使用存根标记 6.8。如何仅渲染组件主体 6.9。用wicket隐藏装饰元素:enclosure标签 6.10。使用Border包围现有标记 6.11。摘要 7.组件生命周期 7.1。组件的生命周期阶段 7.2。组件生命周期的钩子方法 7.3。初始化阶段 7.4。渲染阶段 7.5。删除阶段 7.6。独立舞台 7.7。摘要 8.页面版本控制和缓存 8.1。有状态页面与无状态页面 8.2。有状态页面 8.3。无状态页面 8.4。摘要 9.在请求处理的引擎盖下 9.1。类应用和请求处理 9.2。请求和响应类 9.3。请求处理的“主管” - RequestCycle 9.4。会话类 9.5。异常处理 9.6。摘要 10. Wicket链接和URL生成 10.1。PageParameters 10.2。可收藏的链接 10.3。使用标记wicket自动创建可收藏的链接:链接 10.4。外部链接 10.5。无状态链接 10.6。生成结构清晰的URL 10.7。摘要 11. Wicket模型和表格 11.1。什么是模特? 11.2。IModel和Lambda 11.3。模型和JavaBeans 11.4。Wicket形式 11.5。组件DropDownChoice 11.6。模型链 11.7。可拆卸型号 11.8。在组件中使用多个模型 11.9。使用型号! 11.10。摘要 12. Wicket详细说明 12.1。默认表单处理 12.2。表单验证和反馈消息 12.3。输入值转换 12.4。使用JSR 303验证 12.5。使用IFormSubmittingComponent提交表单 12.6。嵌套表格 12.7。多行文字输入 12.8。上传文件 12.9。使用FormComponentPanel创建复杂的表单组件 12.10。无国籍形式 12.11。使用单选按钮和复选框 12.12。使用ListMultipleChoices和Palette选择多个值 12.13。摘要 13.使用中继器显示多个项目 13.1。RepeatingView组件 13.2。ListView组件 13.3。RefreshingView组件 13.4。可分页的中继器 13.5。摘要 14.组件排队 14.1。标记层次结构和代码 14.2。改进了汽车组件 14.3。组件什么时候出列? 14.4。排队的限制 14.5。摘要 15.与Wicket的国际化 15.1。本土化 15.2。Wicket的本地化 15.3。捆绑查找算法 15.4。组件选择的本地化 15.5。国际化和模型 15.6。摘要 16. Wicket的资源管理 16.1。静态与动态资源 16.2。资源参考 16.3。包资源 16.4。向页眉部分添加资源 16.5。上下文相关资源 16.6。资源依赖性 16.7。使用资源包聚合多个资源 16.8。将JavaScript放在页面正文中 16.9。标题贡献者定位 16.10。自定义资源 16.11。安装资源 16.12。Lambda支持 16.13。共享资源 16.14。自定义资源加载 16.15。CssHeaderItem和JavaScriptHeaderItem压缩 16.16。NIO资源 16.17。资源通过模型得出 16.18。摘要 17.与JavaScript集成的示例 17.1。我们想做什么...... 17.2。......以及我们将如何做到这一点 17.3。摘要 18. Wicket高级主题 18.1。通过行为丰富组件 19.使用AJAX 19.1。如何使用AJAX组件和行为 19.2。内置AJAX组件 19.3。内置的AJAX行为 19.4。使用活动指示器 19.5。AJAX请求属性和调用侦听器 19.6。创建自定义AJAX调用侦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值