Jsf 本身是很多问题的。当然,jsf不是一项技术,而是标准。看看 javax.faces.* 包里的内容,不是抽象类就是接口,是没有实现的。 jsf 出来的时候目的也不是面向应用开发者的,而是面向组件供应商的,从这点意义上来说,jsf是成功的。Sun提供了一个reference implementation, 但是那更像是教组件供应商如何做组件的一个demo,而非真正意义上的给应用开发人员用的成型的组件。
标准因为要融合各方需求,所以内容只能是各方能力的交集。至于标准之外的东西,则需要各方去发挥。
JSF标准因为是先于成型的应用出来的(不同于EJB3的借鉴hibernate和spring,jsf299的借鉴seam),难免会有预见不足的地方。在某些地方可能作了过分的限制,而另外某些地方则完全没有规定放得太开导致标准实现商完全忽略了它们。
但是 Jsf 的初衷是不错的,而且标准本身也足够的可扩展。 所以现在才会诞生如此多的基于 jsf 的框架。 这些框架在不同程度上修复了 JSF 初始制定时的不足。
Ajax4Jsf, Facelets, Seam 是这其中三个独立的方向。
1. A4J: 用网络检测工具可以清晰地看到,每次在JSF postback 的时候,虽然可能只有部分页面需要刷新,但整个页面都会被从服务器送往浏览器。这是非常浪费的。 JSF的event-driven模型实际上非常适合部分页面刷新(试想如果没有事件模型,每晃一下鼠标显示器就把整屏幕重画,现在也就没有 windows了),但是因为ajax出来的时候JSF标准已经final了,就没有把Ajax考虑进去。对于事件模型来说,把整屏幕重画改为部分组件重画是件相对容易的事情,这也就是 Ajax4Jsf 这个项目的目的。是否开启AJAX,可以不需要javascript,只是更改页面中的某个开关(tag)就行了。
2. Facelets: JSF是建立在JSP上的,但这是完全没有必要的。JSP不是模板语言,它只是简单得把嵌入在html里的java语言原样放入Java的源文件里,实际上是混合的html和java。这种模型和JSF的事件模型没有任何互补的关系。相反,它给JSF加入了不必要的限制。Facelets的目的在于取代 jsp在jsf里的地位。它是真正的模板语言,el表达式可以嵌入在页面的任何位置,比如写成:
<h2>Hi,I'm Jordan, I think the winner of this cup is #{winner.name}, is that right?</h2>
Facelets不需要编译,页面是hot-deploy的,性能比jsp快。另外,facelets本身提供了加参模板的功能,定制新的组件可以完全不写java,只把页面里的需要提成组件的内容扔进分离的页面,并且在taglib.xml里面加入tag指向分离的页面,并指定参数名字就可以了。 JSF最为人诟病的组件缺乏的问题,在facelets这里得到了缓解,实际上是不怎么需要第三方组件就可以快速写出舒服的代码来。Facelets还有其它的功能,比如debug页面显示facelets页面出错的行号,比如无限嵌套的模板,等等。
3. Seam: Seam 其实本身是无关JSF的,但是因为它从一开始就建在JSF上面,所以也不得不对JSF的一些问题进行修复。
Seam的工作需要分开来细说:
3.1 page行为 //TODO
3.2 Context-filter //TODO
3.3 RESTful(重建页面参数) //TODO
3.4 异常处理 //TODO
3.5 跨越重定向的状态 //TODO
现在我们有了JSF的加减法:
JSF - (全页面刷新) + Ajax4Jsf - Jsp + Facelets + 全局Page行为 + Context-filter + Restful参数绑定 + 可定制异常 + 跨越重定向的状态 = “ -_- ! 一大碗炸酱面”
就好像一件黄金圣衣,经过无数次修补,虽然还能再用,但是实在不如重铸了。
JSF 需要一套整合的模型,使这些各个分散的部分重新以一种整体的局面展现出来。它需要把多余的东西抛弃掉,把新的内容以更集成的方式融在一起,因为光是熟悉这些不同分散的部分,理解它们之间的关系,知道哪里会有BUG,哪里则可以避免这些BUG,并且在运用的时候总是用对该用的东西,这已经使人非常头大了。 JSF作为标准来说是成功的,在这一标准下有了如此多的可以插拔的第三方软件。 但是该是时候对这些零散的东西统一了。就好像ubuntu在统一的指导思想下集合了尽可能多的零散的开源软件,使它们可以被一种简单并且相似的方式获取,使我不需要像在Gentoo里安装任何一个东西都要搜索搜索再搜索,了解它的来源,了解它的BUG,了解我的硬件是否支持。作为用户,我不想学习,我想有明白的人替我作决定,那是最好的,特别是当这些决定make sense的时候。
现在的Seam正是朝这个方向走的。能走这样的路,得有两个条件,一是有众多零散的可用的东西,但是它们缺乏统一的形式(但它们得有能够统一的背景,比如ubuntu下是posix标准,Seam下是jsf标准);二是有对该领域非常熟悉的人来做这样的事情。上面提到的Seam对JSF的改进其实只是Seam框架下非常小的一部分,是Seam在向这个目标前进的必须的一个步骤,是在Seam内核基础上水到渠成的东西,而远非Seam的全部。正如Seam的名字所示:缝合;正如ubuntu的名字所示:分享与同在。它们的制定者在决定之初即是向着这一目标前进的。
已经early draft review的JSR 299, 即是借鉴了Seam(以及其它比如Guice)的一个标准,试图把这一方向推得更远。
至于对于缝合所需要的本事,Seam的conversation模型,CoC理念,元注解配置+xml补充方式,动态双向注入模型(不同于spring的静态单向注入),扩展了的EL等,是其基础。内部事件和监听模型,和drools的安全集成模型,和hibernate-seach, hibernate-validation, seam-remoting, jbpm,groovy,itext的集成,是其在基础之上的应用。这些则需要另外的文章来写了。//TODO//TODO//TODO
分享到:
相关推荐
Seam 是一个强大的Java EE框架,它主要用于简化...同时,Seam与其他Java EE技术的集成也使得整个应用的架构更加灵活和强大。然而,由于Seam不断更新,开发者需要时刻关注最新文档和技术动态,以确保最佳的使用体验。
结合JSF2与JBoss Seam** - **互补性**:JSF2提供了丰富的组件库和强大的视图管理功能,而Seam则加强了组件之间的交互和会话管理。两者的结合可以显著提升开发效率和应用质量。 - **最佳实践**:例如,在开发复杂的...
**JSF、Seam与JPA整合实例详解** 在现代Web应用开发中,JavaServer Faces (JSF)、Seam框架和Java Persistence API (JPA)是三个关键的技术组件。本实例将深入探讨如何利用这三者进行联合开发,帮助开发者实现高效、...
Ajax4jsf简化了Ajax集成,降低了开发复杂性,同时保持与标准JSF的兼容性。 将这些技术结合使用,可以构建出高度交互且响应迅速的Web应用。Seam作为整合框架,可以帮助管理和协调JSF、RichFaces和Ajax4jsf的交互,...
**JSF、Seam与Hibernate简介** JSF(JavaServer Faces)是Java平台上的一个用于构建用户界面的组件模型框架,它提供了一种声明式的方式来创建动态Web应用程序。JSF的核心概念是组件,这些组件可以组合成用户界面,...
1)JSP+javabean+DAO(Ajax:anywhere) 2)Struts+spring+hibernate3(AJax:DOJO) 3)JSF+richfaces+seam+EJB 总共3个完整的实例,并配有需求分析~~~~~~~~,绝对经典!
[TipTec Development] JSF & Facelets & JBoss Seam 核心技术 (英文版) [TipTec Development] Essential JSF, Facelets & JBoss Seam (E-Book) ☆ 出版信息:☆ [作者信息] Kent Ka Iok Tong [出版机构] TipTec ...
Seam与JSF的整合进一步强化了UI层的开发效率,它提供了更好的事件处理机制,使得JSF组件可以直接与Seam组件交互,降低了数据绑定的复杂性。 在Seam中,JSF和Hibernate的整合主要体现在以下几个方面: 1. **数据...
Seam与JSF的结合,不仅弥补了JSF本身的不足,还为开发者提供了更为强大的功能集。具体来说,Seam对JSF生命周期进行了增强,主要包括以下几个方面: 1. **上下文状态管理**:Seam提供了更灵活的会话管理和组件状态...
通过阅读这本书,读者不仅可以了解JSF2 API的基本使用,还能掌握如何将JSF与JBoss Seam结合起来,提高开发效率,构建出功能丰富且易于维护的Web应用。 《JSF2 API和JBoss Seam入门》这本书的PDF文件"book0107.pdf...
**Seam框架**则是一个全面的Java EE应用框架,它将JSF与EJB、CDI(Contexts and Dependency Injection)、Spring等技术无缝集成,简化了Java EE开发的复杂性。Seam提供了统一的编程模型,允许开发者在JSF组件和后端...
例如,如果A和B之间的相似度高,而A和C之间的相似度低,那么在模糊相似矩阵中,我们不仅记录A与B的高相似度,还会通过减法强调A与C的低相似度。 减法聚类的具体步骤如下: 1. 初始化:为每个数据对象分配一个初始的...
此外,Seam与jBPM的集成允许开发者在应用中嵌入工作流管理,与Drools的结合则提供了规则引擎的支持,进一步增强了应用的业务逻辑处理能力。 总而言之,Seam作为一款集成化的Java EE框架,为开发者提供了一个强大且...
Seam、JSF(JavaServer Faces)和Ajax4jsf是Java Web开发中重要的技术框架,它们在构建富互联网应用程序(Rich Internet Applications, RIA)时发挥着关键作用。这里,我们将深入探讨这三个技术的核心概念、特点以及...
[Apress] JSF 2 APIs & JBoss Seam 基础教程 (英文版) [Apress] Beginning JSF 2 APIs and JBoss Seam (E-Book) ☆ 出版信息:☆ [作者信息] Kent Ka Iok Tong [出版机构] Apress [出版日期] 2009年05月25日 ...
【seam+jsf+richfaces+ajax4jsf打包了】 这个压缩包集合了四个重要的Java Web开发框架,它们分别是Seam、JSF(JavaServer Faces)、RichFaces以及Ajax4jsf。这些技术在构建现代、交互性强的Web应用程序时发挥着关键...
4. **数据绑定**:Seam与JSF紧密集成,使得数据模型可以直接与用户界面元素进行双向绑定,简化了数据管理。 5. **安全性和事务管理**:Seam提供了内置的安全管理和事务处理机制,简化了这些关键领域的实现。 然后...
通过以上介绍,我们可以看出JSF是一种非常强大且灵活的Web应用框架,它与Seam和EJB结合使用时,可以构建出功能完备、易于维护的企业级应用。尽管存在一些缺点,但随着技术的发展,这些问题也在逐步得到解决。