首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Wicket 开发笔记(1)简介

Wicket 开发笔记(1)简介

概要 Wicket 是一个轻量级的基于组件、事件驱动的 Java Web 应用程序框架,经过几年的发展如今最新版本已经到了 6.8.0,作为一个 Java                Web 开发的开源框架,它的特点是小型、轻量、UI 和 Java 逻辑的分离,美工可以专注于 HTML 的开发,而且它隔离了对于 request 和                response                的处理,把程序员从这些繁琐的处理中解放出来,只需要关心业务逻辑,而且它的事件驱动模式会非常的容易上手,这也是它最大的优点。以下示例都是基于                Wicket1.5.5 而写的一些关于 wicket 开发中用到的高级特性, Wicket1.5.5 也是 2012 年初发布的,从被 Apache                收编后,版本直接改成 Wicket6.X,所以这些示例应该没有什么变化。
关于和 Spring 的集成Wicket 对于 Spring 的支持或者说 Spring 对于它的支持都做的很非常好,只是很简单的修改 web.xml,在 Wicket 的                filter 加入 init-param 参数,然后在添加 Spring 的 listener 就可以了。如清单 1 所示。
清单 1. Web.xml 部分代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
   
<filter>
<filter-name>HomePageApplication</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
  <param-name>applicationFactoryClassName</param-name>
  <param-value>org.apache.wicket.spring.SpringWebApplicationFactory</param-value>
</init-param>
</filter>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>




对于 Spring 的 applicationContext 文件的定义这里有不详细说了,唯一不同的就是里面需要增加对于 Wicket app                bean 的定义,如清单 2 所示。
清单 2. applicationContext.xml 中的 Application                    bean 的定义
1
2
3
<bean id="wicketApplication"class="com.ibm.testrun.model.host.HostApp">
<property name="baseDao"ref="baseDao"/>
</bean>




另外对于 Spring的使用的时候,我们对于 Spring bean的注入可以使用最普通的 property形式进行,而 Wicket增加了                annotation形式的引用,这个非常的方便,我们只需要在需要注入 bean的属性上添加 annotation就可以了,如清单 3 所示。
清单 3.WebPage 中关于 Spring Bean                的引用
1
2
@SpringBean(name="taskDao")
privateTaskDao taskDao;




但是需要注意的是这个似乎是对于 WebPage及其子类有效,如果您需要在其它地方,比如 WebApplication类里面使用 Spring的                bean还是 property的形式比较好用。
关于 CheckBoxMultipleChoice 的使用在开发中发现 CheckBoxMultipleChoice 直接显示出来的 checkbox 并没有进行排版,而是像如图 1 所示直接输出 .
图 1. 原始 CheckBoxMultipleChoice这种形式完全不能满足美工的需要,大多数时候我们需要对输出出来的 checkbox group 进行排版,如图 2。
图 2. 经过修改后的 CheckBoxMultipleChoice                    输出那么这个时候我们应怎么做呢,在看了它的源代码后发现,可以通过重载 CheckBoxMultipleChoice 的                appendOptionHtml方法,通过加入 html 元素来实现美工排版的需求,实现上图中的排版的示例代码,如清单 4 所示。
清单4. 重载 CheckBoxMultipleChoice 的                appendOptionHtml 方法代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@Override
protected void appendOptionHtml(AppendingStringBuffer buffer,
SuitesFileHolder choice, intindex, String selected)
{
if(index == 0)
    {
buffer.append("\n<table><tr><td>\n");
} else
               if((index + 1) % 4 == 1)
    {
buffer.append("\n<tr><td>\n");
} else
    {
buffer.append("\n<td>\n");
    }
super.appendOptionHtml(buffer, choice, index, selected);
inttotalSize = this.getChoices().size();
if(index == totalSize - 1)
    {
buffer.append("\n</td>");
if(totalSize % 4 != 0)
        {
for(inti = 0; (i < 4 - totalSize % 4); i++)
            {
buffer.append("<td></td>");
            }
        }
buffer.append("</tr></table>\n");
} else
               if((index + 1) % 4 == 0)
    {
buffer.append("\n</td></tr>\n");
} else
    {
buffer.append("\n</td>\n");
    }
}

返回列表