`

JSF定义及原理

    博客分类:
  • JSF
阅读更多

 

按照JavaServer Faces官方的定义,JSFJava Web应用的用户界面(User Interface,UI)框架。此定义有三种含义:第一,JSF是一种框架;第二,JSF的应用范围是Java Web应用;第三,JSF是专门针对应用界面编程的。所谓框架,是指软件编程的一个基础架构,是对某种类型的软件编程过程进行抽象和归纳后,形成的一套规范和方法。

JSF首次在Java Web应用编程中引入了UI组件模型和事件驱动模式。

JSF将所有的用户界面元素抽象为UI组件,是一种服务器端UI组件。

JSFUI组件,虽然从概念上只是简单地用面向对象的思想封装了Java Web应用的用户界面元素,但其意义深远,既是JSF页面可视化开发的基础,又提高了JSF应用代码的可重用性,是JSF诸多技术中一项有创新意义的技术。事实上,UI组件是JSF技术的核心,也是JSF技术最复杂的部分,但正是UI组件技术用复杂的机件处理了绝大部分繁琐的UI编程任务,程序员手下的JSF应用编程,才变得简单和轻松。

所谓事件驱动,是指在一个应用系统中,一些对象能够产生事件,而另一些对象则能够对事件作出响应。

如果说UI组件是JSF框架的核心,那么事件驱动则是让这个核心能够顺利动作起来的传动机构。Web应用建立在HTTP协议之上,本质上并非事件驱动,当用户在浏览器上点击一个超级链接时,浏览器发出的是一个HTTP请求,不是事件,而Web服务器也只是对HTTP请求作出响应,回送一个HTTP响应给浏览器,其工作原理与事件驱动模型不同。

JSFUI组件模型将UI元素对象化、组件化,为JSF的事件驱动模型奠定了基础。在JSF事件驱动模型中,某些UI组件如按钮和超级链接等是事件源,能够触发事件,另一些UI组件则是监听器,通过注册到事件源组件,来接收事件通知并做出适当的响应。整个事件处理过程非常简单,只需在JSF页面上稍加配置即可。

JSF的事件驱动模型将Java Web编程带入了一个新的阶段,与JSP不同,现在程序员不再需要显式地正理HTTP请求和响应,JSF的事件驱动模型已经封装了这些低级操作。程序员要做的只是集中精力编写事件处理例程。

JSF的定义中,JSF将自身明确定位在表示层。这种严格的限制,在表示层和业务层之间划出一条清晰的界线,有助于实现表示层与业务层的完全分离。

JSF是建立在JSP技术基础之上的,同样使用JavaBean来实现表示层和业务层的分离。这些JavaBean负责在JSF页面与真正的业务逻辑Bean之间搭起桥梁,调用业务逻辑Bean的方法执行用户请求的操作,或者查询业务数据,供JSF页面上的UI组件读取显示。JSF给予这种JavaBean一个专有名称,即Backing Bean,并且为了方便Backing Bean的管理,设计了一种称为Managed Bean的机制,以实现自动的Backing Bean实例化和初始化,并设定其作用范围。所有这些措施,都是为了强化Backing Bean的“表示层”的身份,避免与业务Bean混淆。

JSF规范本身是就是Java EE 5MVC规范,它提倡以页面组件的方式隐藏传统Web应用开发的HTTP细节,允许开发者经传统桌面编程的方式来开发Web应用。JSF通过将托管BeanManaged-Bean作用等同于控制器)的属性、方法直接绑定到页面组件的value属性或者action属性JSFStruts2的最大差别之一就是:JSFUI组件行为可以直接绑定到服务器端代码),就可以非常方便实现系统的MVC控制。

JSF并不是最早出现的MVC框架,但它是一款比较具有革命意义的MVC框架,它与Struts这种框架不同,Struts依然是基于请求――响应模型的,只是提供了更简捷的封装;而JSF则采用面向对象的事件通信机制Web编程中请求――响应模型完全被隐藏起来了。

       JSF中的UI组件可以直接绑定服务器端的托管Bean,因此绝大部分应用不再需要开发者去处理HTTP细节。通过使用UI组件可以将页面操作自动映射到托管Bean中,UI组件以事件通信的机制直接与托管Bean发交互。

       在传统的Web应用里,每个表单对应一次事件,当表单提交时触发submit事件,而单个表单域则无法单独触发事件。而JSF则允许每个表单域触发事件JSF中最常用的两类事件是:Value Change事件和Action事件

       JSF也只是一个MVC框架,它依然无法改变Web应用请求 ――响应的基本流程。因此为了让用户请求被JSF处理,JSF也提供了一个核心控制器来负责处理所有的用户请求,这就是javax.faces.webapp.FacesServlet,它就是JSF的核心控制器。FacesServlet是一个标准的Servlet

       托管BeanJSF应用中最重要的应用组件,因此开发JSF应用的重要任务就是开发托管BeanJSF框架对托管Bean没有太多额外的要求,托管Bean完全可以是普通POJOPlain Old Java Object)。在典型情况下,一个托管Bean与一个应用页面结合,托管Bean定义了与页面中UI组件关联的属性和方法。

       JSF表达式语言的形式是所有位于#号之后的一对花括号之中的字符串(“#{}”),EL对于JSF的作用非常大,它通常用来将UI绑定到托管BeanModel组件。JSF中的表达式语言通常具有延迟求值的特征,通常会等到视图显示时才对表达式语言求值,而不是在编译时求值。与JSP2Struts2EL最大的不同是,JSF中的EL不仅可以访问、输出Bean的属性,还可以更新Bean属性值(当把输入组件的值绑定到托管Bean的属性时)。

 

 

分享到:
评论
1 楼 dageda_jgw 2014-04-03  

相关推荐

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    1.2.2 JSF及替代技术 15 1.2.3 EJB组件技术简介 15 1.3 JBoss的下载和安装 15 1.3.1 下载和安装JBoss服务器 16 1.3.2 配置JBoss的服务端口 18 1.3.3 进入控制台 19 1.3.4 部署Web应用 22 1.4 WebLogic的下载和安装 ...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.2.2. 工作原理........................................................................................................................................................... 26 1.3. Seam 中的可点击列表:...

    Spring攻略(第二版 中文高清版).part2

    1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 ...

    Spring攻略(第二版 中文高清版).part1

    1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 ...

    J2EE应用开发详解

    124 8.5.2 拦截器的实现原理 124 8.5.3 Struts2的内置拦截器 124 8.5.4 拦截器的配置和使用 125 8.5.5 自定义拦截器 126 8.6 一个简单的Struts2应用 130 8.7 小结 140 第9章 JSF 141 9.1 JSF技术简介 141 9.1.1 JSF...

    JAVA程序开发大全---上半部分

    本书内容精练、重点突出、实例丰富,是Java程序开发人员必备的参考书,同时也可作为高等院校计算机及相关专业的教材。 图书目录 第1章 初识MyEclipse 1 1.1 MyEclipse简介 1 1.2 MyEclipse的安装 1 1.2.1 JDK的...

    rdi:具有React能力的依赖注入库,由Reactor提供支持

    它的工作方式类似于,以及具有Quarkus或JSF这样的机制的其他一些框架。 但是,与这些示例不同,RDI并不是完整的框架,而是100%专注于依赖项注入的轻量级库。 为了说明依赖注入的工作方式,请考虑以下基本类: ...

    payments:这是一个JEE 7模板项目,带有一个简单的JAXRS Rest服务和几个测试项目(Systemtest,UI-Test,Acceptancetest)

    该项目展示了基于虚拟结帐/电子商务服务的JavaEE开发的基本原理。 此外,该回购包含用于不同测试方法的项目,然后可以将其添加到jenkins中的单独构建管道中。 付款应用: 是JavaEE 7 Web应用程序,其中包含JAXRS...

    Spring中文帮助文档

    2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 ...

    Spring API

    2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 ...

    Hibernate实战(第2版 中文高清版)

     13.3 高速缓存基本原理   13.3.1 高速缓存策略和范围   13.3.2 Hibernate高速缓存架构   13.4 高速缓存实践   13.4.1 选择并发控制策略   13.4.2 理解高速缓存区域   13.4.3 设置本地的高速缓存提供...

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA上百实例源码以及开源项目源代码

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    整理后java开发全套达内学习笔记(含练习)

    delimiter 定义符; 定界符 Encapsulation[java] 封装 (hiding implementation details) Exception [java] 例外; 异常 [ik'sepʃәn] entry n.登录项, 输入项, 条目['entri] enum (关键字) execute vt.执行 ['...

Global site tag (gtag.js) - Google Analytics