无忧技术网 - RSS订阅 
无忧技术网

JSF 2006年大事记下篇(1)


作者:麻地河 - 发布:2010-4-22 17:35:38 - 来源:无忧技术网

【导读】2006年下半年度的JSF精彩异常。先是ICEsoft发布ICEfaces企业版,接着Exadel的Ajax4jsf为JSF开了Ajax框架之先河,然后Exadel携RichFaces加入JSF组件库竞赛,最后是JBoss推出框架粘合剂Seam 1.1,为JSF 2006划上了圆满的句号。

1. ICEsoft发布ICEfaces企业版

ICEsoft是一家动态Web应用开发商,Ajax和Web 2.0的概念出现之前,ICEsoft已经在动态Web领域积累了丰富的经验。ICEsoft的著名产品是ICEfaces,这是集ICEsoft丰富的应用经验和ISF技术于一体的一个Java软件产品。

2006年7月19日,时间刚刚跨过2006年年中,ICEsoft宣布,其ICEfaces的企业版1.0正式发布。在当时,这是Java EE下唯一的Ajax集成应用框架。ICEfaces扩展了JSF,允许程序员以纯Java的方式开发瘦客户端的富互联网应用。ICEsoft在ICEfaces的开发上投入了相当大的财力,ICEfaces的软件规模累计达到了25人年之巨。凭借如此大规模的投入,ICEfaces成为唯一一个基于标准的Ajax解决方案。利用ICEfaces,开发人员可以实现Ajax的功能,但无须编写任何JavaScript代码。

ICEfaces最独特的优势,是它以瘦客户端的方式开发富互联网应用。ICEfaces是通过将应用逻辑完全转移到服务器端来实现这一点的。在ICEfaces下,应用逻辑完全驻留在服务器上,对表示层的变更,以一种增量的方式提交给浏览器端,由一个轻量级的Ajax“桥”负责变更的组装。这使得开发人员可以按照自己的意愿开发富互联网应用,同时避免大量的JavaScript代码,保持客户端的“瘦身”。

ICEfaces为JSF披上Ajax的时尚外衣,却依然保持客户端的轻灵。这与其他JSF的Ajax解决方案完全不同。通常,富互联网应用所要求的Ajax特性,是通过浏览器端的JavaScript来达到的,随着用户界面复杂度的增加,JavaScript的代码越来越长,最终酿成开发、测试和维护的恶梦。将大量应用逻辑压在JavaScript身上,会带来很多不利的结果,比如增加页面的加载时间,降低页面对搜索引擎的友好性,并且可能引发源代码的安全问题等。

除此以外,ICEfaces还支持Ajax的“推”技术。所谓Ajax推技术,是指服务器端将表示层的变化直接推向客户端。服务器端在与各种各样的后端数据服务交互后,获得表示层应如何变化的信息,利用推技术,服务器端可以异步发送动态数据给用户界面,而不需用户的介入。ICEfaces基于推技术的Ajax功能尤其强大,代表了动态web应用的一个新高度,是其他Ajax方案所不能达到的。

Ajax推技术是ICEfaces的标准特征,可以在Java应用逻辑中直接使用,与某些基于JavaScript“拉”技术的Ajax框架相比,推技术更高效,也更模型化。ICEfaces的推技术使得web用户能够动态地、实时地获得应用的最新数据和状态,为建立web环境下多用户协作的应用开辟了道路,而这在以前是无法用一个轻量级的web框架来做到的。

ICEfaces企业版1.0是一个商业化版本,用户必须支付高达1500美元的费用才能获得一个CPU的授权,否则就只能使用免费的ICEfaces社区版,当然,功能要大打折扣。不过,ICEsoft很快认识到,开源无疑是产品和技术推广的最有效的方式之一,因此,仅仅四个月后,ICEsoft在推出ICEfaces 1.5版的时候,终于决定加入开源的行列了。ICEsoft的这一举动,赢得了包括Sun在内的业界人士和社区的赞赏,现在,JSF开发者又多了一个不错的选择。

2. Ajax4jsf开Ajax框架之先河

作为JSF竞赛的著名“选手”,Exadel时有创新之举。2006年8月7日,Exadel公司网站上,一则消息在JSF社区中激起层层波浪:JSF的开源Ajax框架Ajax4jsf 1.0版诞生了。

促使Exadel作出这一举动的原因有三。第一,随着Web 2.0概念的热炒,Ajax甚嚣尘上,连向以老大自居的Sun都抵挡不住Ajax的诱惑,Exadel自然也未能免俗;第二,Exadel一直是JSF的支持者,早就追随JSF的左右,对JSF的理念深信不疑,十分看好JSF的未来;第三,开源是一场声势浩大的运动,开源已经成为一种潮流,不管Exadel愿意不愿意,开源都是不可逆转的趋势,而且,不少开源的先驱已经摘到胜利的果实,Exadel不想失去这个机会。一句话,Ajax4jsf是Exadel在开源背景下,对Web2.0挑战作出的回应。

Ajax4jsf是一个与JSF规范百分之百兼容的组件库,集Ajax的时尚与JSF的强大于一身。Ajax4jsf的目标是将Ajax和JSF两股力量拧成一股绳,使之成为一个功能强大的软件包,充分发挥JSF的优势(例如JSF的服务器端组件等),开发现代的、交互式的、符合Web2.0概念的富互联网应用。Ajax4jsf是一个开放的框架,继承了JSF的开放精神,追求与不同的JSF实现(Implementation)的无缝集成,同时最大限度地兼容第三放JSF组件库。Ajax4jsf试图通过提供对JSF诸技术(例如Facelets和JSF扩展等)的内在支持,建立一个以JSF为核心的框架系统环境。

Ajax4jsf的工作原理是这样的。在客户端,浏览器加载一个称为Ajax引擎的JavaScript模块,这个模块之上,才是用户看到的真正的JSF页面。当用户在JSF页面上执行某种操作(例如点击鼠标)时,会触发一个JavaScript事件,页面将这个JavaScript事件发给Ajax引擎。Ajax引擎对JavaScript事件进行分析,并根据分析结果形成相应的请求,然后将请求发往服务器端。

在服务器端,来自浏览器Ajax引擎的请求,没有直接交给JSF框架,而是交给了Ajax4jsf框架。Ajax4jsf框架前置于JSF框架,所有来自Ajax引擎的请求,都由Ajax4jsf框架预处理。Ajax4jsf框架由几个模块组成,其工作原理借鉴了JSF的一些概念,是Exadel的核心技术所在。经过Ajax4jsf框架预处理后的请求,最终会发给JSF框架,在这里,请求按JSF的常规经历“JSF请求处理生命周期”的若干阶段后,形成响应,准备发给客户端浏览器。

与请求一样,响应也不是在服务器和浏览器之间直接传递的,同样需要经过Ajax4jsf框架和Ajax引擎的介入,只不过,这次的顺序是相反的。响应离开JSF框架之后,进入Ajax4jsf框架,在Ajax4jsf框架中接受预处理,然后,再经由互联网发送到客户端浏览器。浏览器中,Ajax引擎负责接收来自服务器的响应,Ajax引擎对响应进行分析,从中获得页面更新的信息,并向浏览器发出更新JSF页面的指令。

从Ajax4jsf的工作原理可以看出,Ajax4jsf与JSF的生命周期是有机结合的。与其他Ajax框架只利用managed bean机制不同的是,Ajax4jsf在Ajax请求-响应周期中,可以利用动作监听器、值改变监听器,并且能够调用服务器端验证器和转换器。

Ajax4jsf的另一个特点是,支持页面级的Ajax特性。通常的Ajax支持局限于组件级,而Ajax4jsf的页面级Ajax特性支持,允许指定页面上的一个区域,当一个客户端事件调用一个Ajax请求,Ajax请求更新服务器端数据后,这个指定的页面区域将被同步刷新。利用Ajax4jsf的这一特性,现有的JSF应用可以非常容易地获得Ajax的能力。

Ajax4jsf的其他特性,还包括允许开发自己的内置Ajax功能的JSF组件,能将图像、JavaScript代码和CSS格式表单等资源文件打包在Jar文件中以便于管理,可以动态地生成图像,支持“换肤”功能等。Exadel将Ajax4jsf视为企业应对web 2.0挑战最锋利的武器,对Ajax4jsf寄予厚望。

责任编辑:liqwei
打印本页】【关闭本页】【返回列表
·上一篇:JSF 2006年大事记上篇(2)
·下一篇:JSF 2006年大事记下篇(2)
 文章评分
  • current rating
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
 相关文章
·[Java/JSP]JSF 2006年大事记下篇(2) (2010-04-22)
·[Java/JSP]JSF 2006年大事记上篇(2) (2010-04-22)
·[Java/JSP]JSF 2006年大事记上篇(1) (2010-04-22)
 相关评论
 站点最新文章 更多>> 
·[经典影音]弱点
·[经典影音]萨利机长
·[经典影音]天空之眼
·[管理知识]康奈尔笔记法,提高100%学习效率
·[管理知识]刘强东:我管75000人靠这4张表格
·[管理知识]跟壳牌学HSE管理
·[运营策划]编辑工作内容整理
·[至理名言]奋斗与决定
·[瀚海拾遗]盲人打灯笼之各家论道
·[搞笑段子]中国男足
 站点浏览最多 更多>> 
·[协议规范]http断点续传原理:http头 Range、…
·[JS/CSS/HTML]HTML 空格的表示符号 nbsp / en…
·[NoSQL]Mongo数据库简介
·[协议规范]什么是SPF记录?如何设置、检测SP…
·[协议规范]图解 HTTPS 通信过程
·[PHP]精选国外免费PHP空间推荐
·[程序综合]常用IP地址查询接口
·[程序综合]什么是 DNS Prefetch ?
·[程序综合]获取客户端IP地址的三个HTTP请求…
·[Linux]/usr 目录的由来