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