jsf jsf-2 jar facelets modularity

jsf - Empaquetar archivos de Facelets(plantillas, inclusiones, composites) en un JAR



jsf-2 modularity (3)

¿Es posible colocar archivos JSF2 Facelets con contenido común en un JAR para usarlos desde otras aplicaciones web, por ejemplo, <ui:composition template> , <ui:include src> , <cc:implementation> , etc.? Si es así, ¿cómo puedo lograr esto? ¿Es necesaria alguna configuración extra?



Puede colocar recursos comunes en la carpeta /META-INF/resources del JAR, que debe tratarse como la carpeta /WEB-INF/resources del WAR.

P.ej

CommonWebProject |-- META-INF | |-- resources | | `-- common | | |-- css | | | `-- some.css | | |-- js | | | `-- some.js | | |-- images | | | `-- some.png | | |-- components | | | `-- somecomposite.xhtml | | |-- someinclude.xhtml | | `-- sometemplate.xhtml | |-- faces-config.xml | `-- MANIFEST.MF :

Los recursos del JAR están disponibles de la siguiente manera:

<... xmlns:common="http://xmlns.jcp.org/jsf/composite/common/components"> <h:outputStylesheet library="common" name="css/some.css" /> <h:outputScript library="common" name="js/some.js" /> <h:graphicImage library="common" name="images/some.png" /> <common:somecomposite /> <ui:include src="/common/someinclude.xhtml" /> <ui:composition template="/common/sometemplate.xhtml" /> ...

Si también desea activar el analizador de anotaciones JSF2 para poder poner @FacesValidator , @FacesConverter , @FacesConverter y consorts en ese proyecto, cree un archivo /META-INF/faces-config.xml compatible con /META-INF/faces-config.xml :

<?xml version="1.0" encoding="UTF-8"?> <faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" version="2.0"> </faces-config>

El solucionador de recursos de Facelets solo es necesario si los recursos no están en /META-INF/resources por alguna razón, o cuando no está utilizando Servlet 3.0 pero 2.5, o cuando está usando una versión anterior de JBoss / JSF que tiene errores en la resolución de recursos META-INF. Consulte también ¿Cómo crear una aplicación JSF 2.0 modular? Para un ejemplo concreto.


Sí, puede extender com.sun.faces.facelets.impl.DefaultResourceResolver para proporcionar recursos a JSF.

Una solución genérica es la siguiente:

En tu pom.xml agrega:

<dependency> <groupId>com.intersult</groupId> <artifactId>jsf-desktop</artifactId> <version>1.1-SNAPSHOT</version> </dependency> <repository> <id>intersult-repo</id> <name>Intersult Repository</name> <url>https://intersult.com/svn/public/maven</url> </repository>

O simplemente agregue https://intersult.com/svn/public/maven/com/intersult/jsf-desktop/1.1-SNAPSHOT/jsf-desktop-1.1-SNAPSHOT.jar a su carpeta / WEB-INF / lib.

En tu web.xml agrega:

<context-param> <param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name> <param-value>com.intersult.jsf_desktop.util.ClassPathResourceResolver</param-value> </context-param>

En cualquier JAR dentro de WAR, coloque los archivos XHTML en / META-INF / resources / <archivo.xhtml>

Acceda a él a través de "http: // <dominio> / <web-root> / <jsf-servlet> / resource / <file.xhtml>" (por ejemplo, http://localhost/faces/resource/test.xhtml ) y será rendido