Facelets 是 JSF 的视图描述语言,用于取代 JSP,现在在 JSF 中支持 JSP 视图仅仅是为了向后兼容。在 JSF 2 中引入的新特性,例如 composit 组件和 Ajax,都只能使用 facelets。
Fecelets 的主要特性还包括强大的模板系统、可重用和易于开发、更好的错误报告(包括行标)、和设计师友好的架构。
Facelets 页面使用 XHTML 1.0 和层叠样式表(CSS)。XHTML 1.0 可以表示为遵守 XML 1.0 规则的 HTML 4 文档。Facelets 页面必须遵守 XHTML-1.0-Transitional DTD。
可以定义使用 XHTML 定义一个简单的 facelets 页面:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>My Facelet Page Title</title>
</h:head>
<h:body>
Hello from Facelets
</h:body>
</html>
在上面的代码中,整个文档由 DTD 声明开始。接着,在 html 根节点中定义了默认命名空间为 http://www.w3.org/1999/xhtml,还定义了标签库命名空间 http://xmlns.jcp.org/jsf/html(以 h: 为前缀)。
下表展示了 facelets 支持的标准标签库:
前缀 | URI | 例子 |
h | http://xmlns.jcp.org/jsf/html | h:head, h:inputText |
f | http://xmlns.jcp.org/jsf/core | f:facet, f:actionListener |
c | http://xmlns.jcp.org/jsp/jstl/core | c:forEach, c:if |
fn | http://xmlns.jcp.org/jsp/jstl/functions | fn:toUpperCase, fn:contains |
ui | http://xmlns.jcp.org/jsf/facelets | ui:component, ui:insert |
按照惯例,使用 XHTML 创建的 web 页面后缀名为 .xhtml。
Facelets 提供了表达式语言(EL)集成,下面的例子演示了如何在后台 bean 和页面 UI 之间进行双向数据绑定:
Hello from Facelets, my name is #{name.value}!
在这段代码中 #{name} 就是一个 EL,用于指向 request 范围的 CDI Bean:
@Named
@RequestScoped
public class Name {
private String value;
//. . .
}
记住,在 CDI Bean 中一定要添加 @Named 注释,这样才能将值注入 EL。
从 JSF 2.2 开始 @javax.faces.bean.ManagedBean 不再赞成使用,因此强烈建议使用 @Named。
JSF 2.2 也引入了新的 CDI 范围:javax.faces.view.ViewScoped。使用此注释的 Bean 与当前视图绑定。而 javax.faces.bean.ViewScoped 将不再赞成使用,因此强烈建议使用新引入的 CDI 范围。
类似的,EJB 也可以注入到 EL 中:
@Stateless
@Named
public class CustomerSessionBean {
public List<Name> getCustomerNames() {
//. . .
}
}
这个无状态的 Session Bean 有一个业务方法,返回 customer 名字列表。使用 @Named 注释让这个 EJB 可以注入到 EL 中,因此我们在 Facelets 中可以这样使用:
<h:dataTable value="#{customerSessionBean.customerNames}" var="c">
<h:column>#{c.value}</h:column>
</h:dataTable>
在这段代码中,将 customer 名字列表显示在表格内。注意 getCustomerNames 方法是如何在 EL 中调用的。Facelets 提供了编译时的 EL 验证。
Facelets 提供了很强大的模板系统,允许你跨页面创建一致的用户体验。基本页面被称为模板,通过 Facelets 的模板标签创建,模板页面定义了页面布局以及页面占位符,占位符会被使用了这个模板的页面中的具体内容所取代。
下标列出了模板页面和普通页面使用的标签
标记 | 描述 |
ui:composition | 定义了页面使用的布局,有一个可选的属性 template。如果使用了 template 属性,表示这个标签下的所有元素都将使用 template 属性定义的模板布局,如果没有使用 template 属性,表示这只是一组元素,可以插入到任何地方。这个标签之外的任何内容都会被忽略。 |
ui:insert | 用在模板文件中,定义了占位符,会被普通页面中的内容替换。跟它相对应的标签是普通页面中的 ui:define 标签,占位符会被普通页面中 ui:define 中的内容替换。 |
ui:define | 用在普通页面中,用于定义替换模板文件中占位符的内容。 |
ui:component | 在 JSF 树中插入新的 UI 组件,在这个标签之外的所有内容将会被忽略。 |
ui:fragment | 类似于 ui:component 标签,但不会忽略标签之外的内容。 |
ui:include | 使用 src 属性包含另外的文档到当前文档中。 |
下面是一个简单的模板文件:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:body>
<div id="top">
<ui:insert name="top">
<h1>Facelets are Cool!</h1>
</ui:insert>
</div>
<div id="content">
<ui:insert name="content">Content</ui:insert>
</div>
<div id="bottom">
<ui:insert name="bottom">
<center>Powered by GlassFish</center>
</ui:insert>
</div>
</h:body>
</html>
在上面的代码中,使用 div 来定义了页面的布局,ui:insert 定义了将会被替换的占位符位置。
下面是普通页面文件:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<body>
<ui:composition template="./template.xhtml">
<ui:define name="content">
<h:dataTable
value="#{customerSessionBean.customerNames}"
var="c">
<h:column>#{c.value}</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</body>
</html>
可以看到,在模板文件中 ui:insert 定义的 top 和 bottom 两个占位符没有在普通文件中定义,因此会保留模板文件中的内容。使用 ui:define 定义的 content 将会替换模板文件中的 ui:insert content。另外,在普通文件中 ui:composition 标签之外的所有内容将会被忽略,因此可以不用写 body 和 html 标签,但是出于 html 编写习惯,你可以加上。
来源文章:
http://www.aptusource.org/2014/04/java-ee-7-jsf-facelets/
分享到:
相关推荐
2. **集成性强**: 作为Java EE的一部分,JSF能很好地与EJB、JPA、CDI等其他Java EE技术协同工作。 3. **易维护**: 由于其MVC架构,JSF应用的结构清晰,便于团队协作和长期维护。 4. **社区支持**: JSF有一个活跃的...
【标题】"MyEclipse_JSF_快速入门中文版"是一个专门为初学者设计的教程,旨在帮助用户快速掌握如何在MyEclipse集成开发环境中使用JavaServer Faces (JSF)技术进行Web应用开发。MyEclipse是一款强大的Java EE集成开发...
本系列资料包括《JSF入门》、《JSF Web应用实战开发》和《JSF2》,旨在帮助初学者快速掌握JSF的核心概念和技术。 《JSF入门简体中文版》是学习JSF的基础,它涵盖了JSF的基本架构、组件库、生命周期和事件处理等方面...
本指南将帮助初学者理解JSF的基本概念、架构和核心组件,以便快速入门。 一、JSF简介 JSF是Java EE标准的一部分,由Oracle公司维护。它提供了一种声明式的方式来处理Web页面和后端服务器之间的交互,减少了开发者...
通过这个入门指南,开发者可以了解Java EE 6的基本概念,学习如何利用新特性构建一个简单的Web应用程序。这些知识是进一步深入Java EE世界的基础,对于理解更复杂的分布式系统和企业级解决方案至关重要。
本教程旨在帮助初学者快速入门JSF,掌握其基本概念、架构和常用功能。 一、JSF概述 JSF是Java Community Process(JCP)制定的标准之一,它基于Model-View-Controller(MVC)设计模式,为Java EE平台提供了丰富的UI...
JavaServer Faces(JSF)是Oracle公司推出的用于构建用户界面的Java EE标准框架。它简化了Web应用程序的开发,为开发者提供了丰富的组件库和事件处理机制,使创建复杂的用户交互变得更加简单。本教程将通过MyEclipse...
通过观看"jsf框架入门视频",学习者将能够深入理解JSF的基本概念、组件使用、生命周期、EL表达式以及与Java EE其他技术的协同工作方式。这些视频资料对于想要进入企业级Web开发领域的Java开发者来说是一份宝贵的资源...
总结,JSF 1.1入门教程是一个为初学者设计的资源,旨在帮助你快速掌握这一框架,通过实例学习,你将能够构建功能丰富的Java EE Web应用程序。尽管JSF已经发展到更高级的版本,但理解其早期版本对于深入学习现代JSF...
- **Java EE 6初学者**: 对于刚刚接触Java EE 6的读者来说,本书提供了详尽的入门指南,引导其逐步掌握Java EE 6的核心概念和技术。 - **架构师**: 书中的内容也适用于系统架构师,他们可以从本书中获得关于如何分层...
JSF是一个MVC(模型-视图-控制器)框架,它遵循Java EE规范,用于简化Java Web应用程序的开发。JSF的核心思想是将用户界面与业务逻辑分离,通过声明式的方式管理UI组件和数据绑定。 **2. JSF组件模型** JSF中的组件...
JavaServer Faces (JSF) 是一个用于构建Web应用程序的Java EE框架,它提供了一种组件化、事件驱动的方式来开发用户界面。JSF的核心概念包括UI组件、事件处理、数据绑定以及生命周期管理。在本系列的第一部分,我们将...
**JSF(JavaServer Faces)入门详解** JSF,全称JavaServer Faces,是Java平台上的一个用于构建用户界面的MVC(Model-View-Controller)框架。它为开发人员提供了一种简单、高效的创建Web应用程序的方式,尤其适用...
根据提供的文件信息,本书标题为“Apress.Beginning.Java.EE.7.2013”,它是一本专注于Java企业版(Java EE)7的书籍,涵盖了Java EE 7平台的最新特性。在描述中,列出了读者通过本书将学到的关键知识点,包括对Java...
7. **依赖注入**:JSF集成了Java EE的依赖注入(DI)功能,使得Managed Beans可以方便地注入其他服务,如EJB、CDI Bean等。 8. **集成与扩展**:JSF可以与其他Java EE技术无缝集成,如JPA(Java Persistence API)...
7. **JSF(JavaServer Faces)**:JSF是用于构建用户界面的MVC框架,Java EE5包含了JSF 1.2,提供了一种声明式的方式创建Web界面,与EL和Facelets模板语言结合,提高了开发效率。 8. **JAX-RS(Java API for ...
这个"JSF入门实例 源代码"是专门为初学者设计的,帮助他们快速理解并掌握JSF的基本概念和用法。下面我们将深入探讨JSF的核心特性、工作原理以及如何通过给定的实例进行学习。 1. JSF概述: JSF是一种官方支持的...
7. **部署**:最后,这个"HelloJSF"应用需要被部署到支持Java EE的服务器,如Tomcat、GlassFish或WildFly上,用户可以通过浏览器访问并交互。 通过这个简单的"JSF入门代码"实例,开发者可以学习如何搭建JSF环境,...
这个教程“JSF入门与提高”旨在帮助初学者快速掌握JSF的核心概念和技术。 1. **JSF基本概念**:JSF由组件库、事件处理机制、页面导航、数据绑定等关键部分组成。组件库包含了丰富的UI元素,如按钮、文本输入框等,...