6.2. Facelets是JSF更好的外衣
于是,Facelets出现了。这是由 Sun 公司在 dev.java.net 上的一个开源项目,其主页为:facelets.dev.java.net。为什么说 Facelets 更适合JSF?笔者认为,主要是基于以下特性:
Facelets基于xml,它是组件树更自然的一种描述方式(xml天生就是一种树形结构描述语言)。
Facelets的模版技术,使它更适合网页开发
Facelets支持复合组件,并且,组件的定义方式更简单
Facelets的 jsfc 技术对 html 设计器更友好
与JSP相比,Facelets无需运行前编译,并且,Facelets 还适合对生成的组件树做cache,从而使运行期更轻量,效率更高
6.2.1. 对Facelets的感性认识
我们不妨回顾一下在前面的章节中,列举的例子,它们的页面全部是基于 Facelets 的,以下面的这个页面为例:
该页面的源码如下:
<f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
xmlns:w="http://www.apusic.com/jsf/widget" xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<w:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</w:head>
<w:page title="title">
<h1>title</h1>
<w:textField id="name" />
<ui:debug />
</w:page>
</f:view>
在 JSF 中,每一个页面都称之为是一个“view”,因此,我们就用 <f:view> 来作为页面的根节点。并且,在此节点中,进行各种命名空间的声明。
一个 view,可能被渲染成不同的形式,如,它可能被渲染成一个 html page,也可能是一个 wml page,甚至可能是一个 flash等等。但无论如何渲染,本质上,view 是由组件构成的,因此, view 的渲染,本质上就是组件的渲染。在这个页面中,放了一个组件 page,它的命名空间是 w,而 <w:page> 渲染出来的则是一个 html page。
为了方便理解,我们在页面中放一个 <ui:debug/>,当页面被执行时,通过热键 CTRL+SHIFT+D(这个热键好像和 FireFox的某个热键冲突?这时可以通过 hotkey="e"的形式指定其它热键),即可以显示整个组件树的结构,其组件树结构如下:
同样,上述页面,还可以写成这样:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:w="http://www.apusic.com/jsf/widget">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>title</title>
</head>
<body>
<h1>title</h1>
<w:textField id="name" />
<ui:debug />
</body>
</html>
以<html>作为根元素,并且在此元素内进行命名空间的声明。
此页面的组件树如下:
事实上,上述两种风格,对最终的页面运行效果来说,是相差无几的。第一种风格,更符合程序员思维;第二种风格,更符合常规对html的认识。 无论哪种风格,AOM都予以支持,但在 Apusic Studio 中,我们推荐使用第一种风格,究其原因:Apusic Studio是面向程序员的。
6.2.2. 如何获取 Facelets?
Facelets是位于java.net上的一个项目,其项目主页为:http://facelets.dev.java.net/ 。在 AOM 2.0中,已经内置了对 Facelets 的支持,并且,我们强烈建议您使用 AOM 2.0 自带的 Facelets,因为 AOM 对 Facelets 做了一些扩展。
在AOM 2.0 M2 及以前版本中,有一个专门的jar包:jsf-facelets.jar。在 AOM 2.0 M3版本以后,将其打包到一个统一的jar包: operamasks-third-party.jar。
6.2.3. 如何配置 Facelets
一个web module到底是以 Facelets 作为 JSF的Faces Page,还是以 jsp 作为 Faces Page,主要是以下几个配置,首先是 faces-config.xml:
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
version="1.2">
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
</faces-config>
配置以 Facelets 作为 JSF 的 View Handler,此参数是必须的。
其次,你还需要配置一下 web.xml
<web-app>
<!-- Use Documents Saved as *.xhtml -->
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<!-- Special Debug Output for Development -->
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
...
</web-app>
设置页面的默认后缀为 xhtml,此参数是必须的。
打开 Facelets 的 debug 开关,此参数不是必须的。它的含义是:Setting this to true will cause the FaceletViewHandler to print out debug information in an easy to use screen when an error occurs during the rendering process.
同时,还可以设置 facelets 的 logger 级别,从而在开发期输出详细的log日志以方便调试,请参考:第 23 章 FAQ,Facelets的logger有:
表 6.1. Facelets的Logger
名称 版本号
facelets.compiler For outputting debug information about the compilation process. This would include namespace resolution for TagLibraries and XML events. Most of the output will be FINE
facelets.factory Information about the inner workings of the FaceletFactory
facelets.tag.component Debug information that helps with component lifecycles in relation to Facelets
facelets.viewhandler Will output view-id mapping/resolution and the states of your views
分享到:
相关推荐
在**JSF实例讲解**中,我们通常会涵盖以下几个关键知识点: 1. **JSF架构**:JSF应用由UI组件、事件处理、渲染器、生命周期和状态管理等部分组成。JSF使用MVC(Model-View-Controller)设计模式,其中模型负责业务...
### JSF入门教程知识点概述 #### 一、JSF简介 **1.1 简介JSF** JavaServer Faces (JSF) 是一种用于构建Java Web应用的标准框架,...通过深入了解上述知识点,开发者可以更好地利用JSF来构建高效、可维护的Web应用。
在本文中,我们将深入探讨JSF的核心概念、组件、上下文和生命周期,帮助初学者理解其工作原理。 1. **JSF架构**: JSF的架构围绕组件模型、事件模型和请求处理生命周期展开。核心API包括多个包,如`javax.faces`、...
《JSF Web应用实战开发》则深入到实际开发中,提供了许多实战案例,让读者了解如何在实际项目中运用JSF。内容可能包括如何处理表单提交、验证用户输入、使用AJAX增强用户体验、以及与数据库交互等。这部分资料会帮助...
**JSF_Hibernate_Spring构建WEB应用.pdf** 这份教程很可能讲解了如何将JSF与两个流行的Java开发框架——Hibernate(对象关系映射工具)和Spring(轻量级容器)——结合使用,构建复杂的Web应用程序。这涉及到数据...
IBM的JSF资料可能会讲解如何创建和配置Managed Beans,以及如何在不同作用域(如request、session、application)中管理它们。 **7. EL(Expression Language)** EL是JSF中的表达式语言,用于在JSF组件和Managed ...
事件处理是JSF的一个重要特性,书中的章节会深入讲解事件模型,包括如何注册监听器、处理用户触发的事件,以及如何利用Ajax技术实现部分页面更新,提高用户体验。JSF的Ajax支持使得开发者能够构建更动态、响应式的...
理解和分析源码可以帮助开发者深入理解JSF的工作原理,定制自己的组件,或者优化性能。例如,可以通过查看`FacesServlet`的源码了解JSF如何处理HTTP请求,或者研究`UIComponent`类以了解组件的生命周期和渲染过程。 ...
本教程将从零开始,带你深入理解和掌握JSF的基础知识。 首先,我们需要了解JSF的核心概念。JSF是一种Model-View-Controller(MVC)框架,它的主要组成部分包括: 1. **组件库**:JSF提供了一系列可重用的UI组件,...
在这个“JSF简单入门例子”中,我们将深入探讨JSF的基本概念、关键组件以及如何创建一个简单的JSF应用程序。 **1. JSF基本概念** - **组件模型**:JSF的核心是组件模型,它定义了UI组件及其交互方式。组件可以是...
JavaServer Faces (JSF)、Spring Framework 和 Hibernate 是构建...通过深入理解和实践这些技术,开发者可以构建出高效、可维护的大型企业级应用。如果你对这些技术不熟悉,建议查阅相关的教程和文档以获取更多信息。
这个“JSF ppt课件”很显然是为了帮助学习者深入理解JSF的核心概念和技术。以下是对JSF的一些关键知识点的详细阐述: 1. **JSF概述**:JSF是一种组件化的MVC(模型-视图-控制器)框架,它允许开发者通过拖拽组件到...
压缩包中的"JSF技术文档.doc"很可能是对JSF框架的详细讲解,包括组件体系、生命周期、渲染树、EL表达式、转换器和验证器等核心概念。这份文档将帮助初学者理解如何创建JSF页面、怎样绑定组件到后台bean以及如何处理...
本教程将帮助你快速入门JSF 1.1,讲解其基本概念和使用方法。JSF通过提供一系列预定义的标准控件,使得开发者可以专注于业务逻辑,而不是处理底层HTML和HTTP细节。这些控件包括输入字段、按钮、下拉菜单等,它们与...
"第3章.pdf"通常会深入到JSF组件库。JSF提供了一系列内置的UI组件,如文本输入框、按钮、表单等,这些组件可以直接在Facelets模板中使用。本章可能会讲解如何在页面上添加和配置这些组件,以及如何使用EL...
综上所述,《JSF实战》这本书是一本经典的 JSF 教程书籍,它不仅涵盖了 JSF 的基础知识,还深入探讨了高级主题,如自定义组件的开发。无论是初学者还是有一定经验的开发者,都能从中受益匪浅。通过本书的学习,读者...
- **JSF生命周期**:深入讲解了JSF的应用生命周期,包括各个阶段的作用和实现细节。 - **组件模型**:详细解释了JSF的组件模型,包括UI组件及其属性、事件处理等内容。 - **数据绑定与表达式语言**:介绍了JSF中的...
在《JSF核心编程第二版》这本书中,作者深入浅出地介绍了JSF框架的基本概念、工作原理和最佳实践。书中可能涵盖了以下几个方面: 1. **JSF架构**:JSF的组件模型、事件处理模型和生命周期,这些都是理解JSF如何工作...
- **1.1 简介JSF**:深入了解JSF的基本架构,包括它的设计理念、核心组件及其如何简化Web应用开发。 - **1.2 第一个JSF程序**:通过创建一个简单的JSF应用实例,学习如何搭建开发环境、编写基本的JSF页面以及配置...