第12章 使用 Apache Wicket写你的持久化层
Seam 支持 Wicket当做一个可选的JSF持久化层。看一看在 Seam中的例子, 其展示了移植到Wicket的Booking 例子。
注意,Wicket支持对Seam而言是新的,所以,当你使用Wicket时,那些在JSF中可用的一些特色至今是不可用的(如:页面流)。你也会注意到,文档是非常JSF中心化的,并且需要改造,反射最初类支持Wicket。
12.1.增加Seam 到你的wicket应用程序
特色增加到你的wicket应用程序,能被划分成两类:双向注入和安排。这些在后面详细讨论。
当构建wicket应用程序时,广泛的使用内部类是普遍的,用组件树在构造器中构建。Seam完全支持基于在内部类内和构造器内的控件(不象正规的Seam组件)注释的使用。
任何超类被调用后,注释被处理。这意味着,任何注入的属性在调用this()或 super()时不能被作为一个参数传递。
注意,我们正在着手这方面的改进。
当一个方法在一个内部类中被调用,对任何封装它的类,双向注入发生。这允许你设置你的双向注入变量在外部类,并且在任何内部类中引用它们。
12.1.1. 双向注入
一个Seam使Wicket应用程序可能完全访问所有的标准Seam上下文(EVENT,
CONVERSATION, SESSION, APPLICATION和 BUSINESS_PROCESS)。
从Wicket访问Seam组件,你只需要使用@In注入它:
@In(create=true)
private HotelBooking hotelBooking;
技巧:当你的Wicket类不完全是一个Seam组件时,不需要使用@Name注释它。
你也能从一个Wicket组件“注出”一个对象进到Seam上下文:
@Out(scope=ScopeType.EVENT, required=false)
private String verify;
TODO 进行更多和这种“用例驱动”
12.1.2.安排
你通过使用@Restrict注释,能够保护一个Wicket组件。这个能设置在外部组件或者任何内部组件。如果@Restrict被指定,组件会自动约束注册用户。你能随意地在值属性中使用EL表达式指定一个被应用的约束。对更多情况,请参考15章,安全。
例如:
@Restrict
public class Main extends WebPage {
...
技巧:Seam 会自动对任何嵌套的类应用约束。
TODO – 实现这个 (看 JBSEAM-3192)
通过使用@Begin和@End,在一个Wicket内组件你能区分对话。这些注释使用,在语法上,是和在一个Seam组件中用法是一样的。你能在任何方法上设置@Begin 和 @End。
注意:“反对的” ifOutcome属性是不被支持。
例如:
item.add(new Link("viewHotel") {
@Override
@Begin
public void onClick() {
hotelBooking.selectHotel(hotel);
setResponsePage(org.jboss.seam.example.wicket.Hotel.class);
}
};
如果你想进一步分离你的应用程序的类,你能使用Seam事件。当然,你能使用Events.instance().raiseEvent("foo")触发一个事件。做为选择,你能注释一个方法@RaiseEvent("foo");如果事件返回一个没有异常的非空结果,事件会被触发。
通过@CreateProcess,@ResumeTask, @BeginTask, @EndTask, @StartTask and @Transition,你也能够控制在Wicket中的任务和过程。
TODO – 实现 BPM 控制 - JBSEAM-3194
12.2. 设置你的项目
在Wicket里,你必须放置你的类在WEB-INF/wicket中,才能通过注释让双向注入可用和进行安排控制。Seam需要你的Wicket类的字节码工具能解释你使用的注释。
注意: 通常只有使用一个自定义类加载器的字节码工具被支持,它读取在WEB-INF/wicket 中的类。当项目结果被构建时,用一个Ant 任务或Maven 插件可以开发来支持字节码工具。
12.2.1. 定义应用程序
一个使用Seam 的Wicket网页应用程序,使用SeamWebApplication作为基础类;这个创作物接入Wicket生命周期,当需要的时候允许Seam自动传播对话。它也增加状态消息到页面。
例如:
SeamAuthorizationStrategy传播授权到Seam安全, 允许在Wicket 组件上使用@Restrict。SeamWebApplication 为你安装授权策略。你能通过实现getLoginPage()方法指定注册页面。 你也需要通过实现getHomePage()方法设置应用程序主页。
public class WicketBookingApplication extends SeamWebApplication {
@Override
public Class getHomePage() {
return Home.class;
}
@Override
protected Class getLoginPage() {
return Home.class;
}
}
Seam自动为你安装Wicket 过滤器filter (确保它为你插入到正确的地方)。但是你仍然需要告诉Wicket使用那一个类:
<components xmlns="http://jboss.com/products/seam/components"
xmlns:wicket="http://jboss.com/products/seam/wicket">
<wicket:web-application application-
class="org.jboss.seam.example.wicket.WicketBookingApplication" />
</components>
技巧:关于更多的授权策略和你能覆盖的有关应用程序类的其它方法,请看一下Wicket文档。
[Apache Wicket – Home http://wicket.apache.org/]
分享到:
相关推荐
Apache Wicket Cookbook
12 Composing multiple validators into a single reusable validator 18 Converting string inputs to objects 23 Chapter 2: Getting Down and Dirty with Forms and Form Components 33 Introduction 33 ...
Wicket has been around since 2004 and it has been an Apache project since 2007. During these years it has proved to be a solid and valuable solution for building enterprise web applications. Wicket ...
apache wicket cookbook 包含最新的12章
apache-wicket-7 the most instertst skill
this guide is based on Wicket 6. However if you are using an older version you should find this guide useful as well, but it's likely that the code and the snippets won't work with your version.
本文档演示了如何获取、构建和部署 Apache Fortress Wicket 示例应用程序。 要完成本教程,请首先按照本 README 中的步骤进行操作。 接下来是这里的步骤: 先决条件 Java 8++ Apache Maven 3++ Apache Tomcat ...
什么是Apache Wicket? Apache Wicket是一个开源的,基于Java,基于组件的Web应用程序框架。 通过适当的标记/逻辑分离,POJO数据模型以及令人耳目一新的XML缺乏,Apache Wicket使开发Web应用程序变得简单而又愉快。...
Apache Wicket 是创新型 Java Web 应用程序框架。它通过彻底地分离开发人员与设计人员的角色,帮助简化 Web 应用程序开发。它将允许您从视图层中删除逻辑代码,消除使用 JavaServer Page (JSP) 的需求,提供以简单...
apache-wicket-1.5.11.zip 里面有jar包和api
wicket国际化例子 含有wicket:message StringResourceModel 等读取properties资源文件的代码示例
Apache_Wicket_User_Guide_Reference_Documentation 英文版
wicket-presentation:Apache Wicket演示文稿的源代码
wicket 库文件,一个很好的web框架
创建并扩展Apache_Wicket_Web应用.doc
使用wicket-dashboard,您可以轻松地将带有标准和自定义小部件的仪表板添加到wicket应用程序中。 对于仪表板,您可以指定列数,拖放窗口小部件,删除窗口小部件,添加新窗口小部件,更改窗口小部件设置,折叠窗口小...
目录 1.简介 2.如何使用示例代码 3.我为什么要学习Wicket? 3.1。我们都喜欢意大利面:-) ... 3.2。面向组件的框架 - 概述 3.3。面向组件的Web开发框架的优点...附录C:使用Apache Wicket重定向丢失 附录D:有助于本指南