《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元素,因此模板的这部分内容被替换。

相关文章
|
4月前
|
Java API
Java基础知识:什么是Java平台,包括Java SE,Java EE和Java ME?
Java基础知识:什么是Java平台,包括Java SE,Java EE和Java ME?
53 2
|
1月前
|
分布式计算 安全 Java
Java的三大体系架构:深入剖析Java的三大体系架构,包括Java SE、Java ME和Java EE等
Java的三大体系架构:深入剖析Java的三大体系架构,包括Java SE、Java ME和Java EE等
45 1
|
6月前
|
Oracle Java 关系型数据库
JAVA 那些事 - 聊聊那些易混淆的概念:JVM/JRE/JDK,openJDK/oracleJDK,JAVA SE/JAVA EE/Jakarta EE
JAVA 那些事 - 聊聊那些易混淆的概念:JVM/JRE/JDK,openJDK/oracleJDK,JAVA SE/JAVA EE/Jakarta EE
|
9月前
|
开发框架 安全 网络协议
java基础 --- 浅谈Java SE、Java EE、Java ME三者的区别
java基础 --- 浅谈Java SE、Java EE、Java ME三者的区别
92 0
|
10月前
|
存储 安全 网络协议
JAVA EE十三大规范(1)RMI(全网最深入浅出)
1.概述 RPC: RPC(Remote Procedure Call),一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议,RPC可以用HTTP协议实现,并且用HTTP是建立在 TCP 之上最广泛使用的 RPC,但是互联网公司往往用自己的私有协议,比如鹅厂的JCE协议,私有协议不具备通用性但是相比于HTTP协议,RPC采用二进制字节码传输,更加高效也更加安全。 用一个比较形象的例子来形容,你老婆出去打麻将,然后想起家里洗衣机里的衣服还没洗,于是打电话给在家里的你,叫你把洗衣机里的衣服洗了,这就是远程过程调用。微服务中服务的调用底层就是使用的RPC机制。
104 0
|
Oracle Java 关系型数据库
【方向盘】认为:开发者已无理由再用Java EE
历史的巨轮,永远滚滚向前。
205 0
【方向盘】认为:开发者已无理由再用Java EE
|
消息中间件 Java 中间件
|
IDE Java 应用服务中间件
IDEA/Tomcat 原理:如何将 Tomcat 集成到 IDEA?实现由传统部署延伸到热部署 Java EE 项目?
IDEA/Tomcat 原理:如何将 Tomcat 集成到 IDEA?实现由传统部署延伸到热部署 Java EE 项目?
121 0
IDEA/Tomcat 原理:如何将 Tomcat 集成到 IDEA?实现由传统部署延伸到热部署 Java EE 项目?