JSF 学习笔记

一种用于构建 Web 应用程序的新标准 Java 框架。
它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。

对各角色人员好处:
  a. “企业开发人员”和 Web 设计人员:JSF 开发可以简单到只需将用户界面 (UI) 组件拖放到页面上,
  b. “系统开发人员”:丰富而强健的 JSF API 为他们提供了无与伦比的功能和编程灵活性。
  c. 系统维护人员:良好构建 MVC 设计模式集成到它的体系结构中,确保了应用程序具有更高的可维护性。

  

 

JSF于2004年3月1.0版正式提出,清楚的将Web应用程序的开发者分了三个角色:
  网页设计人员
  应用程序设计人员
  UI组件开发人员


JSF 生命周期:
  FacesServlet 充当用户和 JSF 应用程序之间的纽带。
  它在明确限定的 JSF 生命周期(规定了用户请求之间的整个事件流)的范围内工作。
    1. 当JSF页面上的一个事件发生时(比如:用户单击了一个按钮),事件通知通过HTTP发往服务器。服务器端使用FacesServet这个特殊的Servlet处理该通知。
    2. FacesServlet一接收到用户的请求就创建一个FacesContext对象(JSF上下文,它存放了应用程序的所有数据)。在处理过程中,主要修改的就是这个FaceContext对象。
    3. 接着就是处理过程,处理器是一个叫作Lifecycle的对象。FacesServet把控制权转交给Lifecycle对象。该对象分6个阶段来处理FacesContext对象以生成响应,最后将响应发回客户端。

请求处理生命周期(6个阶段):
1. 恢复视图:
  为选定的视图找到或创建组件树
  一旦用户单击JSP页面上的链接或按钮,就会启动此阶段。
  JSF应用里的JSP页面被表示成一个组件树。
  JSF实现会进一步将这些组件链接到事件处理程序和验证程序,并将视图保存在FacesContext对象中,以备后面的处理过程所用。
  FacesContext对象包含了JSF用来管理当前会话中当前请求的GUI组件状态所需要的所有状态信息。

2. 应用请求值:(数据类型验证)
  使用请求中发送来的值来更新组件树的组件值。
  因为请求中发送来的值都是String类型的,所以在更新组件树的组件值之前,必须将这些值转换为相应类型。
  这个过程也是解码。
  若转换有错误,这些错误将添加到FacesContext对象。

3. 处理验证:(数据内容验证)
  当每个组件的本地值被更新后,Lifecycle对象都会根据这些注册组件的验证规则来验证这些值的合法性。
  如果输入的值不符合验证规则,就会将验证错误添加至FacesContext对象,并将组件标记为无效。
  JSF将转至呈现响应阶段,并显示带有验证错误消息的视图。
  如果没有遇到验证错误,JSF将进入下一阶段。

4. 更新模型值:
  更新与组件相关的后台bean(也叫管理bean)或者模型对象的值。
  只有那些与组件值绑定在一起的Bean属性才会被更新。

5. 调用应用程序:
  JSF控制器调用应用程序来处理应用程序级的事件,如提交一个表单。
  (此阶段可执行业务逻辑)

6. 呈现响应:
  使用当前的显示技术(如JSP)显示选定的视图。

注:
  由于请求处理生命周期里的应用请求值、处理验证、更新模型值和调用应用程序等阶段都可以在当前的请求对应的FacesContext实例中添加事件,因此,JSF实现必须在这些阶段后处理这些事件。

参考:
  http://www.oschina.net/p/jsf/
  http://wenku.baidu.com/view/fad84209763231126edb1112.html

JSF2.0 参考实现:

What is Mojarra?
  > Mojarra is Sun's high performance, battle-tested implementation of JSF,
  and is used in IBM WebSphere™, Oracle WebLogic™, Oracle 10g Application Server, SpringSource dm Server™, and other popular enterprise platforms.
  > Like all of Java, Mojarra is open source, dual licensed with GPL+Classpath Exception and CDDL.
  > Mojarra was the first JSF runtime to support Groovy, and does so for all of JSF

http://javaserverfaces.java.net/presentations/20090520-jsf2-datasheet.pdf

JSF使用范例:

1. 在Eclipse 3.5中使用JSF 2.0开发Web应用环境配置及一个简单例子
  http://www.unix-center.net/bbs/redirect.php?fid=70&tid=17884&goto=nextoldset
  注:JSF RI包含samples的最后版本是2.0.6(06/03/2011)。之后的版本只有一个类似于 javax.faces-2.1.6.jar的单一文件。
    这个文件也可以在glass fish的module目录里得到。
    2.0.6版本中的guessNumber例子存在一个bug,解决办法是在在construct方法中加入初始化maximum和minimum变量。如maximum=100;minimum=0; 
    RI download at:http://javaserverfaces.java.net/download.html 

2. 运行mojarra-2.0.2例子
  http://www.cnblogs.com/haichang/archive/2010/01/14/1647510.html
  注:maven3和maven2不一样。
    这个例子中要求使用2,如果使用3,则会报类似以下错误:
    [ERROR] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-co
    mpiler-plugin must be a valid version but is 'RELEASE'. @ line 55, column 26

 

 

posted @ 2012-03-25 09:29  万法自然~  阅读(775)  评论(0编辑  收藏  举报