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

本节书摘来异步社区《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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值