《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
相关文章
|
1月前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
58 9
|
2月前
|
Java
Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
【10月更文挑战第14天】Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
65 2
|
4月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
|
1月前
|
Java 开发者
JAVA高手必备:URL与URLConnection,解锁网络资源的终极秘籍!
在Java网络编程中,URL和URLConnection是两大关键技术,能够帮助开发者轻松处理网络资源。本文通过两个案例,深入解析了如何使用URL和URLConnection从网站抓取数据和发送POST请求上传数据,助力你成为真正的JAVA高手。
54 11
|
1月前
|
Java API Apache
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
123 0
在Java中处理JSON数据:Jackson与Gson库比较
|
2月前
|
JSON Java 数据格式
Java Jackson-jr库使用介绍
Jackson-jr是专为资源受限环境设计的轻量级JSON处理库,适用于微服务、移动应用及嵌入式系统。它通过牺牲部分高级功能实现了更小体积和更快启动速度,非常适合对库大小敏感的项目。本文将介绍如何使用Jackson-jr进行JSON序列化与反序列化,并演示处理嵌套对象与数组的方法。此外,还介绍了自定义序列化与反序列化的技巧以及性能与功能的权衡。通过示例代码,展示了Jackson-jr在常见任务中的高效与灵活性。
28 0
|
3月前
|
数据采集 存储 前端开发
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
|
4月前
|
安全 Java 网络安全
【认知革命】JAVA网络编程新视角:重新定义URL与URLConnection,让网络资源触手可及!
【认知革命】JAVA网络编程新视角:重新定义URL与URLConnection,让网络资源触手可及!
44 2
|
4月前
|
安全 Java
Java模拟生产者-消费者问题。生产者不断的往仓库中存放产品,消费者从仓库中消费产品。其中生产者和消费者都可以有若干个。在这里,生产者是一个线程,消费者是一个线程。仓库容量有限,只有库满时生产者不能存
该博客文章通过Java代码示例演示了生产者-消费者问题,其中生产者在仓库未满时生产产品,消费者在仓库有产品时消费产品,通过同步机制确保多线程环境下的线程安全和有效通信。