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表达式可以嵌入在页面的任何位置,比如写成:
Hi,I'm Jordan, I think the winner of this cup isA4j Facelets, is that right?
Facelets不需要编译,页面是hot-deploy的,性能比jsp快。另外,facelets本身提供了加参模板的功能,定制新的组件可以完全不写java,只把页面里的需要提成组件的内容扔进分离的页面,并且在taglib.xml里面加入tag指向分离的页面,并指定参数名字就可以了。 JSF最为人诟病的组件缺乏的问题,在facelets这里得到了缓解,实际上是不怎么需要第三方组件就可以快速写出舒服的代码来。Facelets还有其它的功能,比如debug页面显示facelets页面出错的行号,比如无限嵌套的模板,等等。
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的集成,是其在基础之上的应用。这些则需要另外的文章来写了。
分享到:
相关推荐
根据给定的信息,本文将对JSF框架及RichFaces组件库进行深入解析,重点介绍其技术要求、安装步骤以及核心概念等内容。 ### 技术要求 #### 支持的Java版本 - Java SE 5 或更高版本:由于JSF框架是基于Java标准版...
在"基于JSF的问卷调查系统"中,这个框架被用来构建一个允许用户填写、提交问卷的应用。 首先,JSF的核心是组件模型,它包括UI组件、事件和数据绑定。UI组件如文本输入框、单选按钮等,可以与后端的数据模型直接关联...
《基于JSF_Spring和Hibernate的网上报销系统的设计与实现》是针对初学者的一个实践项目,旨在介绍如何利用Java企业级开发技术构建一个完整的网上报销系统。该项目主要涉及三大技术框架:JavaServer Faces (JSF),...
2. **视图解析**:JSF框架解析请求URL,找到对应的Facelets视图。 3. **组件渲染**:Facelets视图中的组件被转换成HTML并发送回浏览器。 4. **事件处理**:如果请求包含用户交互(如按钮点击),JSF会查找相应的事件...
这些JAR包通常在开发和部署Java Web应用程序时使用,特别是那些基于JSF和JSP的项目。它们涵盖了从XML处理、JSF框架到JSP标签库的多个方面,帮助开发者高效地构建和运行Web应用。理解并正确使用这些库对于提升项目的...
**JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,主要用于构建Web应用程序。它提供了一种组件化和事件驱动的方式来创建交互式...通过理解和掌握这些知识点,开发者可以高效地构建基于JSF的Web应用程序。
UI组件模型是JSF框架中最复杂也最具创新性的部分,它封装了复杂的UI处理逻辑,使开发者可以专注于应用逻辑的实现。 #### 三、事件驱动模型:JSF的灵魂 事件驱动模型是JSF框架的灵魂,它将Web应用的交互过程转换为...
5. **创建JSF应用程序**:能够独立设计并实现基于JSF的Web应用程序,包括页面布局、组件交互及服务器端业务逻辑的集成。 课程面向ACCP4.0第三阶段学员,假定学生已具备计算机基础、软件技术、C语言编程、Java面向...
`jsf-api`包含了JSF框架的公共接口和类,这些定义了开发者如何在他们的应用程序中与JSF交互。API提供了如`UIComponent`、`FacesContext`、`PhaseListener`等核心组件和上下文对象,它们构成了JSF生命周期的基础。...
JSF框架详解** JSF是Java EE的一部分,它的核心是组件模型和事件驱动机制。JSF组件库包括一系列可重用的UI组件,如按钮、文本框、表格等,开发者可以通过XML配置或Java代码来创建和布局页面。JSF通过EL(Expression...
- **重建视图(Restore View)**:在这个阶段,JSF框架会检查当前页面是否是第一次访问。如果是首次访问,则会创建一个新的组件树;如果是会话阶段,则会从客户端或服务器端存储的数据中恢复每个组件的状态,并重建...
FacesContext是JSF框架上下文,它封装了与当前请求相关的所有信息,包括请求参数、视图状态、消息、响应对象等。它是JSF组件和底层Servlet容器之间的桥梁。 **4. ManagedBean** ManagedBean是JSF中的业务对象,通常...
**JSF(JavaServer Faces)教程** JSF是一种基于组件的服务器端用户界面(UI)框架,用于构建和实现Web应用程序。...通过深入学习这个教程,开发者将能更好地理解和掌握JSF框架,从而高效地开发高质量的Web应用。
总之,`jsf-api-2.0.3.jar` 在JSF开发中扮演着核心角色,提供了API接口供开发者使用,以构建基于JSF的Web应用程序。对于Tomcat环境下的项目,确保该库的正确配置和存在至关重要,否则可能会导致应用程序运行出错。
- **richfaces**:RichFaces是另一个基于JSF的组件库,提供了一组富互联网应用(RIA)组件,包括数据可视化、表单处理和用户界面特效。 **文件名称列表解析:** 由于只有一个文件名为"SourceCode",我们可以推测这...
JavaScript Faces (JSF) 是一个Java平台上的服务器端Web应用程序框架,主要用来构建富客户端用户界面。这篇博客文章(虽然链接不...不过,由于没有实际的博客内容可供参考,以上内容是基于JSF的一般知识进行的阐述。
JSF,即JavaServer Faces,是Sun Microsystems为Java平台提供的一种用于构建基于Web的应用程序的组件框架。JSF1.2作为JSF的第一个主要版本更新,引入了多项改进和新特性,包括但不限于增强的事件处理、更丰富的组件...
通过对这些知识点的学习,读者不仅能深入了解JSF框架的核心概念和技术特点,还能掌握如何使用JSF构建实际的应用程序。无论是初学者还是有一定经验的开发者,都能从中获得有益的信息和实践指导。