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的属性时)。

 

 

你可能感兴趣的:(编程,bean,UI,应用服务器,JSF)