《Java EE 7精粹》—— 3.11 资源库契约

简介: JSF2引入了Facelets作为默认的视图声明语言(VDL)。Facelets允许使用XHTML和CSS创建模板,模板可以为应用程序的不同页面提供一致的界面外观。JSF2.2定义了资源库契约,一种与资源关联的模板库,可以以可重用和可互换的方式应用到整个应用程序。

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

3.11 资源库契约

JSF2引入了Facelets作为默认的视图声明语言(VDL)。Facelets允许使用XHTML和CSS创建模板,模板可以为应用程序的不同页面提供一致的界面外观。JSF2.2定义了资源库契约,一种与资源关联的模板库,可以以可重用和可互换的方式应用到整个应用程序。应用程序中可配置的视图集合将可以声明自己是资源库契约中任何模板的模板客户端。

资源库契约驻留在Web应用程序的根目录的契约目录中:

7ae655ba107b6d0d3d2854767f9d1ccc606574dd

在这段代码中:

  • 应用程序同样有两个页面:index.xhtml和new/index.xhtml。这些是模板客户端页面。
  • 所有的契约都保存在WAR的契约目录,所有的模板和资源的契约保存在自己的目录中。例如,前面的结构定义有两个契约(contracts):blue和red。
  • 每个契约都有template.xhtml文件、CSS和图像。每个模板都被称为一个声明的模板。在模板中,建议使用h:outputStylesheet引用样式表,以便他们被适当地解析。
  • template.xhtml文件中的标签被称为插入点声明。
  • CSS、图像和绑定在目录中的其他资源被称为资源声明。
  • 模板声明、插入点声明和资源声明一起定义了资源库契约。为了使用资源库契约,模板客户端需要知道这三者的值。客户端页面将通过引用模板来使用资源库契约:
    a14cfb61e3266f373f948256ef983d9c4563d372

    契约是基于调用URL pattern应用的。根据此处指定的配置,red契约将被应用到faces/index.xhtml,契约将被应用到faces/new/index.xhtml。

    a683b79a7b02148480c159f2e61b4ca3679c53f1

    契约可以被打包在JAR文件的META-INF/contracts项中。在JAR文件中的每个契约必须有一个标记文件。文件名由符号常量javax.faces.application.ResourceHandler. RESOURCE_CONTRACT_XML的值给出:

    eebed72744e8cbb08b937f1900ae1584cf8a7015

    我们应用程序的契约目录的内容被打包在JAR文件(比如名叫layout.jar)的META-INF/contracts项中。这个JAR文件可以被打包到WEB-INF/lib中,其所声明的模板可以在应用程序中使用:

    333f5f3b725ba0e3f48c398f461d9b2ac148842d

    可以使用一个新的layout.jar文件,提供一组类似的插入点和资源(可能有不同的CSS)声明,来改变应用程序的界面外观。

    改变f:view中ui:composition的template属性值可以动态地改变页面的模板:

    eb5f19beaf83d5c43febf7d4a15cd78edac95dd7

    在这段代码中:

    • f:view有一个contracts属性与EL表达式绑定。
    • 这个EL的值是由ui:define中表单内的单选按钮的值填充的。
    • 单选按钮的值匹配契约(contract)名称。
    • 单击命令按钮Apply,所选择的模板将应用于此页面。

    backing bean的定义很简单:

    2d70135ead27d694597ebbb0c5d114181c592bd5
相关文章
|
12天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
26 0
|
10天前
|
监控 Java 物联网
Java串口通信技术探究1:深入理解RXTX库
Java串口通信技术探究1:深入理解RXTX库
24 2
|
3天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
9 0
|
4天前
|
数据采集 机器学习/深度学习 Java
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像
本文介绍了如何使用Java和Apache HttpComponents库从Facebook获取图像数据。通过设置爬虫代理IP以避免限制,利用HttpClient发送请求,解析HTML找到图像链接,然后下载并保存图片。提供的Java代码示例展示了实现过程,包括创建代理配置、线程池,以及下载图片的逻辑。注意,实际应用需根据Facebook页面结构进行调整。
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像
|
6天前
|
SQL Java 分布式数据库
实现HBase表和RDB表的转化(附Java源码资源)
该文介绍了如何将数据从RDB转换为HBase表,主要涉及三个来源:RDB Table、Client API和Files。文章重点讲解了RDB到HBase的转换,通过批处理思想,利用RDB接口批量导出数据并转化为`List<Put>`,然后导入HBase。目录结构包括配置文件、RDB接口及实现类、HBase接口及实现类,以及一个通用转换器接口和实现。代码中,`RDBImpl`负责从RDB读取数据并构造`Put`对象,`HBaseImpl`则负责将`Put`写入HBase表。整个过程通过配置文件`transfer.properties`管理HBase和RDB的映射关系。
22 3
实现HBase表和RDB表的转化(附Java源码资源)
|
10天前
|
存储 缓存 前端开发
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
34 3
|
10天前
|
安全 IDE Java
Java串口通信技术探究2:RXTX库单例测试及应用
Java串口通信技术探究2:RXTX库单例测试及应用
26 4
|
11天前
|
Java
在Java中绘制移动平均线(MA),可以使用JavaFX库
使用JavaFX库在Java中绘制移动平均线(MA)的示例,创建LineChart,设置标题和坐标轴,生成数据集并添加数据点,计算MA5值,将数据和MA5线显示在图表上。通过调整参数和方法可自定义外观。查阅JavaFX文档获取更多详情。
13 0
|
12天前
|
Java Maven
【亮剑】Java项目开发中常遇到Jar 包依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起
【4月更文挑战第30天】Java项目开发中常遇到依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起。解决冲突需分析依赖树、定位冲突源、调整类加载顺序等。方法包括排除冲突依赖、统一管理版本、限定依赖范围、合并冲突类、升级降级库版本及拆分模块。关注依赖关系,及时解决冲突,保障项目稳定运行。
|
12天前
|
Java
JavaFX库用于在Java中绘制K线图,适合构建富客户端应用。
JavaFX库用于在Java中绘制K线图,适合构建富客户端应用。以下是一个简单的K线图绘制示例:创建OHLCChart,设置标题和坐标轴,创建数据集并添加数据点,最后显示在Scene中。要定制图表外观,可利用JavaFX的丰富参数和方法。查阅JavaFX文档以获取更多细节。
24 3