原创 JSF入门收藏

 | 旧一篇: javascript下写的一个分页模板

第一章JSF的简述

[thinker-yhm1218@hotmail.com]

一、什么是JSF

 

 

JSFJavaServer Faces,是一种新的用于构架j2ee应用用户界面的技术,适合于基于MVC架构的应用中。

JSF技术的主要功能有:

本文将通过cnjsf这个应用程序对以上功能进行展开描述,要理解本文,您需要对 Web开发、servlet, JSP, JavaBeans, 与标签库有一定的理解

 

 

二、JSF的工作原理

 

 

   JSF应用程序实质上是一个运行在一个与 Java(TM) 2 Platform, Enterprise Edition (J2EE(TM) platform) 兼容的容器中的 Servlet 或者 Java Server Pages(JSP) 应用程序。但是,JSF 不要求在应用程序中使用 JSP 页面,您可以自由选择直接使用 Servlets 或者其他模板技术。如果确实对 JSP 容器使用了 JSF,您将通过 JSF 的客户组件标签从内建的 JSF 内核和 HTML 组件库中受益。JSF 组件代表像文本字段、表单、按钮、表格、复选框等的 Web 控件。

 

 

使用 JSF 创建一个 JSP 页面时(如图1-1中的myform.jsp),在服务器的内存中(如图1-1中的WEB Container)会建立一个组件树,每一个组件标签对应树中的一个 UIComponent 实例(1-1中的myUI)。该框架使用组件树来处理应用程序的请求(如图1-1中的HTTP Request)并且创建一个呈现出的响应(如图1-1中的HTTP Response)。当用户生成一个事件时,例如,点击了一个按钮,JSF 生命周期即处理该事件并且产生适当的响应。这是一个对大多数GUI编程的表单而言常见的一种的范例。每当用户做任何事情,如点击按钮或者提交表单,都有事件产生。然后事件消息通过 HTTP 传到服务器。在服务器端,是一个配置了叫做 Faces servlet 的特殊 servlet WEB 容器。Faces servlet(javax.faces.webapp.FacesServlet)是所有 JSF 应用的引擎。每个 JSF 应用在 WEB 容器中都有独立的 Faces servlet

 

 

FacesServlet 是进入 JSF 框架的入口点。它处理请求处理生命周期并且用作一个前端控制器。JSF 也有保存重要请求信息的上下文的概念。上下文对象被称为 FacesContextjavax.faces.context.FacesContext)。在 JSF 生命周期的每个阶段上下文对象都被修改并且每次请求时都是有效的。

 

 

Faces servlet 的后台处理是相当复杂的。然而你没有必要了解这些细节,只需要记住:Faces servlet JSP 页面创建了组件树,对组件树的控制又对应着事件。Faces servlet 知道怎么去创建组件树,因为它已经访问了当前应用中所有的 JSP 页面。Faces servlet 还会创建一个 Event 对象,并把它传递给所有注册过的侦听器。你可以通过与当前请求相对应的 FacesContext 得到这个页面的组件树。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


                   UI在服务端的运行原理图(图1-1

 

 

 

 

三、一个简单的JSF应用程序(A Simple JSF Application)

 

 

1、创建JSF应用程序的步骤

 

 

开发一个简单的JSF应用程序通常需要完成以下四个步骤:

 

 

u       创建页面(通常为JSP页面),用JSF组件封装HTML元素

u       在应用程序资源配置文件中定义页面导航

u       Backing beans 用来保持用户输入与组件数据的状态。

u       在应用程序资源配置文件中加入managed bean 描述

      

    以上四个步骤可以同时进行,也可以按照任何顺序随机进行。但是,不同开

    发者之间建议保持联系。例如,页面设计师(page author)需要知道对象(bean object)的名称,以便通过页面访问。

        下面,我们将通过一个简单的应用程序(Hello World),让你可以更加形象的理解上述内容。

 

 

2、运行应用程序

  [需要本应用程序工程文件包的可发Emailyhm1218@163.com]

  本应用程序是一个简单的用户注册表单提交程序。为了运行这个应用程序,你需要准备Tomcat5.0JSF1.1(包含在 Java Web Services Developer Pack (JWSDP) 1.4)。为了使这个应用能正常工作,还需要几个 jar 文件,包括 JSF 标准实现与其它类库。如果你安装了 JWSDP 1.4,你就可以在 jsflib 目录下找到所需要的这些文件。把这些 .jar 文件拷贝到 WEB-INF/lib 目录下。下面是整个的 .jar .tld 文件列表:

jsf-api.jar 包含有 Faces servlet 与其它相关 javax.faces 包下面的类

jfs-impl.jar JSF 的实现

jstl.jar

standard.jar

commons-beanutils.jar

commons-collections.jar

commons-digester.jar

commons-logging.jar

当然,如果您正在使用Jbuilder 2005,那么,您只需要把本程序的工程以Jbuilder 2005的方式打开,编辑工程的项目属性,设置ServerTomcat5.0,重新编译工程,编译通过之后,启动Tomcat5.0OK,你现在可以访问http://localhost:8080/web/index.faces[Jbuilder 2005集成了JSF]

 

 

3、应用程序简要解析

  1)创建页面(Creating the pages

       本应用程序共有四个JSP页面

index.jsp----欢迎页

<%@ page contentType="text/html; charset=GBK" %>

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

<f:view>

<f:loadBundle basename="ApplicationResources" var="bundle"/>

<html>

<head>

<title>

<h:outputText value="#{bundle['cnjsf.welcome.title']}"/>----<h:outputText value="#{bunlde['cnjsf.welcome.message']}"/>

</title>

</head>

<body bgcolor="#ffffff">

  <div align="center">

<h1>

<h:outputText value="#{bunlde['cnjsf.welcome.message']}"/>

</h1>

<h:form id="indexForm">

  <h:commandLink id="link" action="register">

    <h:outputText value="#{bundle['cnjsf.reg']}"/>

  </h:commandLink>

</h:form>

</div>

</body>

</html></f:view>

      

     

关于index.jsp页面引申的一些说明:

JSP页面为Web应用程序提供UIJSF提供了两个JSP标签库(后续的章节中我们会对这方面的知识进行详细讲解),它们将组件展现给页面设计师(page author)。您可以定制这些组件或者创建自己的组件。标准的组件作为基本的HTML4.01组件呈现,使得JavaScript绝对最小,这确保您的页面在所有的浏览器按期望的样子显示。

1、要使用包含组件的内建JSF标签库,您需要在JSP页面中包含以下指令

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

 2、注意您的JSF页面需要所有JSF标签都包含在<f:view>..</f:view>标签之间,从而可以正确的建立组件树。

3<f:loadBundle basename="ApplicationResources" var="bundle"/>用来绑定一个资源文件,实现消息的本地化。basename属性指定文件包路径,本应用程序中文件放在src目录下,var属性指定变量名。资源文件如下:

   ApplicationResources.properties

#公共变量

cnjsf.welcome.message=Hello World

cnjsf.welcome.title=::CNJSF网欢迎您::

cnjsf.reg=注册

cnjsf.username=用户名

cnjsf.password=密码

cnjsf.success=注册成功

cnjsf.failure=注册失败

cnjsf.reback=返回

ApplicationResources_zh.properties

#\u516c\u5171\u53d8\u91cf

cnjsf.welcome.message=Hello World

cnjsf.welcome.title=::CNJSF\u7f51\u6b22\u8fce\u60a8::

cnjsf.reg=\u6ce8\u518c

cnjsf.username=\u7528\u6237\u540d

cnjsf.password=\u5bc6\u7801

cnjsf.success=\u6ce8\u518c\u6210\u529f

c