《Java EE 7精粹》—— 第3章 JSF 3.1 Facelets

简介: 此外,Facelets提供了一个功能强大的模板系统,使我们可以在一个Web应用程序的多个页面之间提供一致的界面外观。基础页面称为模板,是通过Facelets的模板标签创建的。这个页面为Web页面定义了一个缺省页面骨架,包括内容占位符,会在将来的页面中使用模板来添肉。

本节书摘来异步社区《Java EE 7精粹》一书中的第2章,第2.1节,作者:【美】Arun Gupta,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第3章 JSF

JSF是基于Java的Web应用程序开发的服务器端用户界面(UI)框架。使用JSF可以实现:

  • 使用遵循模型-视图-控制器(MVC)设计模式的可重用的UI组件集合来创建网页。
  • 绑定组件到服务器端模型,允许UI与应用程序数据双向移动。
  • 处理UI事件响应和模型交互中的页面导航。
  • 管理跨服务器请求的UI组件状态。
  • 提供从客户端生成的事件到服务器端应用程序代码的简单模型。
  • 轻松地构建和重用自定义UI组件。

JSF应用程序包括:

  • 置于UI组件的布局中的一组网页。
  • 一组托管的Bean,包括绑定组件到服务器端模型的Bean(通常是CDI Bean)和作为控制器的Bean(通常是EJB或CDI Bean)。
  • 可选的部署描述符文件web.xml。
  • 可选的配置文件faces -config.xml。
  • 可选的一组自定义对象,包括应用程序开发人员创建的转换器和监听器。

3.1 Facelets

Facelets是JSF的视图声明语言(又名视图处理器)。他是JSP的替代者,JSP现在只保留了向后兼容性。在JSF2规范中引入的新功能,如复合组件和Ajax,只会暴露给Facelets的使用者。Facelets的主要优点包括一个功能强大的模板系统,可重用和易于开发,更好的错误报告(包括行号),以及对设计人员友好。

Facelets页面使用XHTML1.0和层叠样式表(CSS)来编写。XHTML1.0的文档是遵循XML1.0规则书写的HTML4文档。页面必须符合XHTML-1.0-Transitional DTD的要求。

使用XHTML定义的一个简单的Facelets页面如下:

0d2dcebfb3c625386abb18fe17755352d2fa58ce

在这段代码中,XML声明之后是文档类型定义(DTD)。页面的根元素是html,其中声明了命名空间http://www.w3.org/1999/xhtml。声明XML命名空间是为了在Web页面中使用标签库,Facelets的html标签(那些以h开头的标签)和普通的html标签用于添加组件。

表3-1给出了Facelets支持的标准标签库集合。

9b3a356d9009fc192f130cd95a0041a80653813a

按照惯例,使用XHTML创建的Web页面使用.xhtml作为扩展名。

Facelets提供表达式语言(EL)集成,这使得后台Bean可以和前台UI之间实现双向的数据绑定:

b15265968026250a2e2c2b05c4db5fa458c53525

在这段代码中,EL表达式#{name.value}代表请求作用域的CDI Bean的value字段的值:

5709f75a18f4e92d84ea377c8fbf09294a98b171

重要的是要为这个CDI Bean添加@Named注解,以使其可以依赖注入到EL表达式中。

在JSF2.2中,@javax.faces.bean.ManagedBean注解是未来的版本中不建议使用的,所以强烈建议使用@Named来代替。

JSF2.2还引入了新的CDI作用域:javax.faces.view.ViewScoped。在一个Bean上指定该注解,可以将这个Bean与当前视图绑定。javax.faces.bean.ViewScoped注解是未来的版本中不建议使用的,所以强烈建议使用新引入的作用域。

同样地,一个EJB可以在EL表达式注入:

53b78870426421b390435cdbbf0e867f557a1404

这是一个无状态的会话Bean,包含一个返回客户名称列表的业务方法。@Named标记它可以依赖注入到EL表达式中,可以在Facelets的EL表达式中使用:

0ccb4d2cecd75eb6d89365f52373cec4a14e532f

在这段代码中,客户名称列表的返回值显示在一个表格组件当中。请注意getCustomerNames方法是如何作为一个属性用在EL表达式中的。

Facelets还提供了编译期EL表达式验证。

此外,Facelets提供了一个功能强大的模板系统,使我们可以在一个Web应用程序的多个页面之间提供一致的界面外观。基础页面称为模板,是通过Facelets的模板标签创建的。这个页面为Web页面定义了一个缺省页面骨架,包括内容占位符,会在将来的页面中使用模板来添肉。模板客户端页面使用这个模板,为模板骨架中定义的占位符提供具体的肉(实际的内容)。

表3-2列出了一些在模板和模板客户端页面中使用的通用标签。

3e260b686c05e9ea9dfb3a2e3e63625b657b5a9e

模板页面的外观示例如下:

7eb69a88376ab50a7fc3e97f440ab6da5d197a8d

在这段代码中,在页面中使用

和CSS(在这里没有显示)定义结构。ui:insert定义了被模板客户端页面替换的内容。

模板客户端页面示例如下:

63515cdbc167fbb5dddb558fbe8e49064e60bb3e

在这段代码中,名为top和bottom的ui:insert没有定义,那么这些部分使用模板页面的ui:define元素的名称匹配模板中的ui:insert元素,因此模板的这部分内容被替换。

相关文章
|
3月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
466 1
|
6月前
|
设计模式 算法 Java
Java SE 与 Java EE 组件封装使用方法及实践指南
本指南详细介绍了Java SE与Java EE的核心技术使用方法及组件封装策略。涵盖集合框架、文件操作、Servlet、JPA、EJB和RESTful API的使用示例,提供通用工具类与基础组件封装建议,如集合工具类、文件工具类、基础Servlet、实体基类和服务基类等。同时,通过分层架构集成示例展示Servlet、EJB和JPA的协同工作,并总结组件封装的最佳实践,包括单一职责原则、接口抽象、依赖注入、事务管理和异常处理等。适合希望提升代码可维护性和扩展性的开发者参考。
211 0
|
前端开发 Java 数据库连接
你不可不知道的JAVA EE 框架有哪些?
本文介绍了框架的基本概念及其在编程领域的应用,强调了软件框架作为通用、可复用的软件环境的重要性。文章分析了早期Java EE开发中使用JSP+Servlet技术的弊端,包括可维护性差和代码重用性低等问题,并阐述了使用框架的优势,如提高开发效率、增强代码规范性和可维护性及提升软件性能。最后,文中详细描述了几种主流的Java EE框架,包括Spring、Spring MVC、MyBatis、Hibernate和Struts 2,这些框架通过提供强大的功能和支持,显著提升了Java EE应用的开发效率和稳定性。
783 1
|
12月前
|
存储 缓存 前端开发
JavaEE初阶——初识EE(Java诞生背景,CPU详解)
带你从零入门JAVAEE初阶,Java的发展历程认识什么是cpu,cpu的工作原理,cpu是如何进行计算的,cpu的架构,指令集,cpu的核心,如何提升cpu的算力,cpu的指令,,cup的缓存,cpu的流水线
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
258 0
|
设计模式 监控 安全
屏幕监控软件的设计模式:深入理解Java EE
在Java EE环境中,屏幕监控软件采用生产者-消费者设计模式,`ScreenCaptureProducer`类捕获屏幕数据并放入队列,`ScreenCaptureConsumer`负责处理和提交。数据每5分钟通过定时任务和RESTful API自动提交至网站,提升管理效率。该方案支持实时监控、数据分析和高效的数据处理。
257 2
|
存储 Java 对象存储
<Java EE 进阶> 3.Spring简单的读和取
<Java EE 进阶> 3.Spring简单的读和取
135 1
|
存储 Java Linux
【Java EE】 文件IO的使用以及流操作
【Java EE】 文件IO的使用以及流操作
164 3
|
存储 安全 Java
【Java EE】CAS原理和实现以及JUC中常见的类的使用
【Java EE】CAS原理和实现以及JUC中常见的类的使用
211 3
|
安全 Java 编译器
【Java EE】总结12种锁策略以及synchronized的实现原理
【Java EE】总结12种锁策略以及synchronized的实现原理
331 1