设为首页 收藏本站
查看: 914|回复: 0

[经验分享] 第12章 使用 Apache Wicket写你的持久化层

[复制链接]

尚未签到

发表于 2017-1-14 09:22:39 | 显示全部楼层 |阅读模式
12 使用 Apache Wicket写你的持久化层
 
Seam 支持 Wicket当做一个可选的JSF持久化层。看一看在 Seam中的例子, 其展示了移植到WicketBooking 例子。
 
注意,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 组件上使用@RestrictSeamWebApplication 为你安装授权策略。你能通过实现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/]

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-328174-1-1.html 上篇帖子: apache standard.jar 包 c:forEach标签是否存在着内存泄露? 下篇帖子: Apache Tomcat 5.5配置-多域名绑定与虚拟目录设置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表