Facelets — это система веб-шаблонов с открытым исходным кодом под
лицензией Apache . JavaServer Faces 2.2 (
JSR 344 ) является частью
спецификации JavaEE 7 , определяющей
контракты библиотеки ресурсов, которая позволяет динамически повторно использовать шаблоны Facelets во всем приложении во время выполнения. Как можно помнить, Facelets была технологией обработчика представления по умолчанию с Java Server Faces версии 2.0. В этом уроке мы обсудим использование контрактов с библиотеками ресурсов.
Что такое контракты? Контракты в веб-приложении Java — это файлы шаблонов и CSS, которые сгруппированы в каталоге «
контракты » (
другое расположение по умолчанию — каталог META-INF / контракты в CLASSPATH ), родительским объектом которого является корневой каталог. Шаблоны и другие ресурсы каждого контракта (
например, файлы JavaScript, изображения ) находятся в своем собственном каталоге. Файл шаблона контракта называется «
объявленный шаблон, а CSS контракта и другие ресурсы называются
объявленными ресурсами .
Требования к использованию Прежде всего, для использования контрактов необходим объявленный шаблон,
тег ui: insert, который называется
объявленными точками вставки в этом шаблоне. Объявленные шаблоны, объявленные точки вставки и
необязательные объявленные ресурсы вместе составляют определение библиотеки ресурсов.
1. Структура каталогов проекта 2. Зависимости проекта
4. /index.xhtml
5. /member/index.xhtml
Resource Library Contracts
лицензией Apache . JavaServer Faces 2.2 (
JSR 344 ) является частью
спецификации JavaEE 7 , определяющей
контракты библиотеки ресурсов, которая позволяет динамически повторно использовать шаблоны Facelets во всем приложении во время выполнения. Как можно помнить, Facelets была технологией обработчика представления по умолчанию с Java Server Faces версии 2.0. В этом уроке мы обсудим использование контрактов с библиотеками ресурсов.
Что такое контракты? Контракты в веб-приложении Java — это файлы шаблонов и CSS, которые сгруппированы в каталоге «
контракты » (
другое расположение по умолчанию — каталог META-INF / контракты в CLASSPATH ), родительским объектом которого является корневой каталог. Шаблоны и другие ресурсы каждого контракта (
например, файлы JavaScript, изображения ) находятся в своем собственном каталоге. Файл шаблона контракта называется «
объявленный шаблон, а CSS контракта и другие ресурсы называются
объявленными ресурсами .
Требования к использованию Прежде всего, для использования контрактов необходим объявленный шаблон,
тег ui: insert, который называется
объявленными точками вставки в этом шаблоне. Объявленные шаблоны, объявленные точки вставки и
необязательные объявленные ресурсы вместе составляют определение библиотеки ресурсов.
1. Структура каталогов проекта 2. Зависимости проекта
<dependency> <groupId>org.glassfish</groupId> <artifactId>javax.faces</artifactId> <version>2.2.0</version> </dependency>3. Конфигурационный файл Faces
<application> <resource-library-contracts> <contract-mapping> <url-pattern>/member/*</url-pattern> <contracts>colorless</contracts> </contract-mapping> <contract-mapping> <url-pattern>*</url-pattern> <contracts>colored</contracts> </contract-mapping> </resource-library-contracts> </application>Контракт применяется на основе шаблона URL . На основе этой конфигурации в нашей реализации будут применяться «цветные» контракты в корневом каталоге и «бесцветные» контракты с директором-участником.
4. /index.xhtml
<f:view contracts="#{myContracts.contract}"> <ui:composition template="/template.xhtml"> <ui:define name="content"> <h:panelGrid> <a href="#{facesContext.externalContext.requestContextPath}/member/index.xhtml">Visit</a> member directory <p>Choose a theme:</p> <h:form> <h:selectOneRadio value="#{myContracts.contract}" layout="pageDirection" required="true"> <f:selectItem itemValue="colored" itemLabel="Colored"/> <f:selectItem itemValue="colorless" itemLabel="Colorless"/> </h:selectOneRadio> <h:commandButton value="Apply theme" action="index"/> </h:form> </h:panelGrid> </ui:define> </ui:composition> </f:view> </body>Обратите внимание, что тег f: view содержит тег ui: состав и его атрибут контрактов . Мы обеспечим динамический обмен шаблонами, установив различные имена контрактов во время выполнения для свойства Managed Bean, которое связано с выражением EL для этого атрибута.
5. /member/index.xhtml
<body> <ui:composition template="/template.xhtml"> <ui:define name="content"> <a href="#{facesContext.externalContext.requestContextPath}/index.xhtml">Visit</a> home directory <br/> </ui:define> </ui:composition> </body>6. MyContracts.java
package com.kodcu; import java.io.Serializable; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; /** * @author hakdogan */ @ManagedBean @SessionScoped public class MyContracts implements Serializable { String contract = "colored"; public String getContract() { return contract; } public void setContract(String contract) { this.contract = contract; } }7. Демо-приложение Реальный контент выше и демонстрационное приложение, могут быть доступны в
Resource Library Contracts