`
forhope
  • 浏览: 360335 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

JSF笔记(二)

阅读更多
输出日期格式化:
<h:outputText value="#{file.uploadTime}">
   <f:convertDateTime timeZone="GMT+8" locale="cn" pattern="yyyy-MM-dd" />
</h:outputText>



工作原理:

JSF六个底层原理:
  • 重建组件树:jsf应用里的jsp页面被表示成一个组件树。在这个阶段里,通过重建这棵树开始LifeCycle处理过程。每个组件树都有一个在整个应用程序范围里唯一的标识符,此标识符是所请求URI的路径信息部分
  • 应用请求值:在这个阶段,使用请求里的当前值来更新每个组件的本地值,这些值可能来自请求参数,请求的包头及cookie。在这个阶段的处理中,组件可以往事件队列里加入某些事件,这些事件可在随后的处理阶段处理
  • 处理验证:当每个组件的本地值被更新后,在此阶段中LifeCycle对象会验证这些值的合法性。要求验证的组件必须提供验证逻辑的实现。作为选择,开发人员可以为一个组件注册0个或者多个验证器。如果发现外部验证器,那么还会应用这些外部验证器里的验证逻辑来验证本地值。
  • 更新模型值:只有当组件树中所有的组件的本地值都通过验证后,才有可能到达该阶段。在这个阶段中,LifeCycle更新呢应用的模型数据。组件在这个节点也可以排列事件。
  • 调用应用:在这个阶段,JSF实现处理所有应用层次的时间。
  • 呈现响应:在这个阶段,JSF实现将相应发挥客户端。

JSF的生命周期:
恢复视图--应用请求值--处理验证--呈现响应--调用应用程序--更新模型值

JSF的工作方式:
JSF应用是通过处理由页面中组件处罚的事件来工作的。这些事件是由用户的动作引起的。(JSF是事件驱动的)
  • 创建FacesContext
  • 把控制权交给LifeCycle
  • 分六个阶段处理FacesContext



        按照JavaServer Faces官方的定义,JSF是Java Web应用的用户界面(User Interface,UI)框架。此定义有三种含义:第一,JSF是一种框架;第二,JSF的应用范围是Java Web应用;第三,JSF是专门针对应用界面编程的。所谓框架,是指软件编程的一个基础架构,是对某种类型的软件编程过程进行抽象和归纳后,形成的一套规范和方法。
  • JSF首次在Java Web应用编程中引入了UI组件模型和事件驱动模式。
  • JSF将所有的用户界面元素抽象为UI组件,是一种服务器端UI组件。
  • JSF的UI组件,虽然从概念上只是简单地用面向对象的思想封装了Java Web应用的用户界面元素,但其意义深远,既是JSF页面可视化开发的基础,又提高了JSF应用代码的可重用性,是JSF诸多技术中一项有创新意义的技术。事实上,UI组件是JSF技术的核心,也是JSF技术最复杂的部分,但正是UI组件技术用复杂的机件处理了绝大部分繁琐的UI编程任务,程序员手下的JSF应用编程,才变得简单和轻松。

        所谓事件驱动,是指在一个应用系统中,一些对象能够产生事件,而另一些对象则能够对事件作出响应。
        如果说UI组件是JSF框架的核心,那么事件驱动则是让这个核心能够顺利动作起来的传动机构。Web应用建立在HTTP协议之上,本质上并非事件驱动,当用户在浏览器上点击一个超级链接时,浏览器发出的是一个HTTP请求,不是事件,而Web服务器也只是对HTTP请求作出响应,回送一个HTTP响应给浏览器,其工作原理与事件驱动模型不同。
JSF的UI组件模型将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 5的MVC规范,它提倡以页面组件的方式隐藏传统Web应用开发的HTTP细节,允许开发者经传统桌面编程的方式来开发Web应用。JSF通过将托管Bean(Managed-Bean作用等同于控制器)的属性、方法直接绑定到页面组件的value属性或者action属性(JSF与Struts2的最大差别之一就是:JSF的UI组件行为可以直接绑定到服务器端代码),就可以非常方便实现系统的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。
       托管Bean是JSF应用中最重要的应用组件,因此开发JSF应用的重要任务就是开发托管Bean。JSF框架对托管Bean没有太多额外的要求,托管Bean完全可以是普通POJO(Plain Old Java Object)。在典型情况下,一个托管Bean与一个应用页面结合,托管Bean定义了与页面中UI组件关联的属性和方法。
       JSF表达式语言的形式是所有位于#号之后的一对花括号之中的字符串(“#{}”),EL对于JSF的作用非常大,它通常用来将UI绑定到托管Bean、Model组件。JSF中的表达式语言通常具有延迟求值的特征,通常会等到视图显示时才对表达式语言求值,而不是在编译时求值。与JSP2、Struts2中EL最大的不同是,JSF中的EL不仅可以访问、输出Bean的属性,还可以更新Bean属性值(当把输入组件的值绑定到托管Bean的属性时)。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics