Seam’s core competencies

      seam解决了Java EE开发中的很多问题,在我们的开发过程中提供了很多帮助,一一列举这些帮助是个高强度的体力活。作者经过认真分析,把他们归纳为了三点。更好的JSF,快速致富,还有

JSF升级版

      JSF被seam选为首席外交官是因为他可扩展的request lifecycle和强大的UI组件模型,而不是他的完美无缺。seam看到了JSF的潜力,利用这种设计来强化JSF,把他培养成了引人注目的创建web界面的现代化技术。虽然seam支持其他可选的view技术,但本书主要关注JSF。

提升JSF

       经seam改进的JSF,不再需要在配置文件中声明managed bean。此外,seam还增加了丰富的面向页面功能,配置文件中的导航规则也变得多余了。这些特性包括:

  • 提前呈递的page actions
  • 受控的请求参数(给定页面)
  • 智能的有状态和无状态导航
  • 透明的JSF数据模型和数据选择处理
  • 精细的异常处理
  • 页面级别的安全(控制到view id)
  • 基于注解的表单验证
  • 可收藏的命令链接(解决了“一切都是POST”的问题)
  • 可选择列表的Entity转换器
  • 会话控制
  • 避免lazy initialization异常,支持view层的非事务数据访问。

      还有就是将纯粹用于页面到业务逻辑层组件事件传递的连接bean清理掉。

 

消灭连接bean

         任何seam组件都能通过EL绑定到JSF的view层。

         有图为证!

         好处多多多!很多!

引入 statfule 变量空间

     web应用程序开发所面临的主要挑战之一就是学会如何把数据从一个页面传递到下一个页面-也就是传说中的状态管理。两个现成的解决办法是表单中的隐藏控件或HTTP session。第一个需要做很多工作,第二个呢,会吃掉很多内存,而且会让程序的可扩展性大打折扣。

      为了满足用户交互对有状态变量空间的需求,seam在标准的web变量空间上增加了conversation context和business process context。conversation scope可以为单一用户的一系列页面流之间的数据传递提供存储空间,这会在第七章详细介绍。business process scope(第14章)可以在涉及多个用户的工作流程之间传递数据。seam container 管理的各个变量空间生命周期关系如图所示。

     conversation context在seam中非常重要,他不仅能带给用户更好的体验,还使开发人员使用起ORM工具来变得更容易。

扩展persistence context

      使用ORM与数据库交互时,你用到了persistence Manager。persistence Manager的每一个实例都会维护一个内部的persistence context,也就是内存cache,这个cache用来保存已经从数据库中取出的Entity实例。数据库服务器通常是您的机房里身价最高(当然也应该最忙)的那个家伙,您当然想尽可能的让这个内存cache帮你减少冗余的查询。在整个request中保留persistence context(Open session in View模式)是朝正确的方向迈进了一步,而让他能跨越多个页面请求就更棒了!可在seam出来之前,persistence context根本就没有地儿可呆,因此,每个请求都要清空persistence context。

       Seam接管了persistence Manager并把他存在conversation context中,因此,seam 能带着他,还有他的persistence context穿越整个用例(可能需要发起多个页面请求来完成)。这个特性能够保证entity实例始终处于persistence context的管理之下,从而保证数据的一致性和操作的原子性。

       seam控制了persistence Manager,也消除了lazy initilization exception,因为在整个用例中persistence Manager都处于打开的状态,自然能够在需要时载入需要的数据记录。conversation和persistence context配合的如此天衣无缝,以至于她都被称为了seam的unit of work。第三部会介绍他们两个是如何进行交互的。

致“富”捷径

      seam为你提供了构建rich的web 2.0应用程序所需的工具,你还可以利用这些工具改造已有的web程序。不久之前,rich代表那些使用Ajax技术构建的web程序,他们能给用户带来桌面应用的操作感受。seam提供了两条致“富”之路,其一是使用支持Ajax的JSF组件,例如RichFaces或ICEFaces;还有就是在浏览器中用JavaScript直接调用server端的组件方法。其实seam对rich还有额外的解释,就是对诸如PDF、图表和图片等rich media的处理。

利用JSF生态系统

      Web用户界面越来越复杂,想要白手起家,靠敲XHTML和JavaScript代码来致“富”根本是不可能的。你必须站在巨人的肩膀上。JSF想当巨人,seam就对准他的肩膀直接踩了上去。

      JSF的主要目标就是发展显示在屏幕上的控件。他想出办法将UI组件的设计方和使用方分开来。 就像swing中的widgets一样,JSF组件也是为常用的控制需求提供的通用解决方案。目前来看,JSF的组件开发商已经向世人证明了自己,他们提供的组件从基本的数据表格,到树状结构,以及拖拽控件,应有尽有,无所不包。

      以前开发企业应用程序最难缠的部分就是UI(大家都做过丑陋的jsp文件吧?)。在采用了JSF之后,这块阵地可以很容易的拿下了。因为JSF组件的呈现是那么的合情合理,你甚至都不需要WYSIWYG IDE来看到他们究竟是什么样子。他们不仅对工具友善,对人类也很友善。托JSF的福,UI也有自己的API了!

远程JavaScript

      在seam中用JavaScript调用server端的组件就跟把大象放进冰箱一样简单,拢共只要三步!第一,给组件方法上面带个@WebRemote的小帽;第二,把JavaScript remoting library放到页面中;第三,调用!用组件的JavaScript client stub调用!seam会帮你解决幕后的工作。你只要通过他给开的门去创建single-page的web应用程序就完了!

       尽管这些日子讨论web应用的时候Ajax吸引了大多数人的眼球,可但是,想致富还有捷径!那就是rich media!

创建rich media

       第13章,你会发现,seam是一个生产各种rich media的老手!借助Facelets view library,seam可以根据XHTMl模板给出各种样式的输出界面,包括PDF文档、RTF文档,以及包含各种附件的email。另外,他还提供了两种组件标签,一个用来上传文件(零底层代码,零定制),还有一个用来渲染动态图片。通常这些任务都是通过web framework交给第三方类库来做的。实际上seam也是这么干的,它也用了iText和JFreeChart等类库,但他提供了一个统一的方式,你只需要处理Facelets composition templates,你写的还是seam的代码。

 

敏捷环境养成

       seam不仅是一个framework,他还为你准备了一个工具箱。你可以用这些工具搭建项目,生成代码,以递增的方式进行开发。

项目生成

       记住seam-gen!

热部署

       难道说,这个也很新鲜?!!!

debug页面

       debug mode,/debug.seam。有异常看异常,没异常看状态!

无需部署,直接测试

        这个,就不说了吧!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值