¿Es posible poner archivos JSF2 Facelets con contenido común en un JAR para usarlo desde otras aplicaciones web dentro, p. <ui:composition template>
, <ui:include src>
, <cc:implementation>
, etc.? Si es así, ¿cómo puedo lograr esto? ¿Es necesaria alguna configuración adicional?Empaquetar archivos de Facelets (plantillas, incluidos, composites) en un JAR
Respuesta
Puede poner recursos comunes en la carpeta /META-INF/resources
del JAR que se tratará como la carpeta /WEB-INF/resources
del WAR.
E.g.
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 entonces 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 desea que el scanner anotación JSF2 también de modo que usted puede poner @ManagedBean
, @FacesValidator
, @FacesConverter
y consortes en ese proyecto, así, a continuación, crear un archivo compatible /META-INF/faces-config.xml
JSF2:
<?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 recurso Facelets resolver solo es necesario si los recursos no están en /META-INF/resources
por algún motivo, o cuando no está utilizando Servlet 3.0 pero 2.5, o cuando está utilizando una versión anterior de JBoss/JSF que tiene errores en la resolución de recursos META-INF. Ver también How to create a modular JSF 2.0 application? para un ejemplo concreto.
Primero lea aquí sobre el difference between war and jar en una pregunta similar.
Deberá crear el archivo EAR y agrupar las guerras.
Sí, puede extender com.sun.faces.facelets.impl.DefaultResourceResolver para proporcionar recursos a JSF.
Una solución genérica es como sigue:
En su pom.xml complemento:
<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 añadir 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 su web.xml complemento:
<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 del lugar GUERRA XHTML-archivos en/META-INF/recursos/<file.xhtml>
acceder a él a través de "http : // <dominio>/< web raíz >/< JSF-servlet >/recurso/<file.xhtml> "(por ejemplo http://localhost/faces/resource/test.xhtml.) y se rindió.
- 1. Eclipse, JAR Exportar es empaquetar archivos svn
- 2. Cómo empaquetar recursos en Jar correctamente
- 3. Plantillas T4: evite las líneas vacías de los archivos incluidos
- 4. plantillas freemarker en varios jar
- 5. Cómo empaquetar la biblioteca en ActionScript3 (¿equivalente a .jar?)
- 6. obtener lista de archivos incluidos en un archivo zip
- 7. excluir tipos de archivos al empaquetar un rpm
- 8. Cómo obtener archivos en un directorio, incluidos todos los subdirectorios
- 9. ¿Cómo se debe empaquetar/implementar un ESB?
- 10. ¿Cómo hacer un archivo JAR que incluya archivos DLL?
- 11. Puede agregar varios archivos jar en un archivo jar y luego iniciar ese archivo jar
- 12. Plantillas distribuidas en varios archivos
- 13. Qué archivos están realmente incluidos al compilar
- 14. ¿Cómo usar y empaquetar un archivo JAR con mi aplicación de Android?
- 15. importando archivos jar externos
- 16. ¿La mejor manera de empaquetar varias plantillas de jQuery en una sola solicitud de xHttp?
- 17. Carga de archivos de JAR en Scala
- 18. Usar bloques de archivos incluidos para padres en jinja2
- 19. Acceder a las variables de los archivos incluidos en Ruby
- 20. Los archivos jar locales no están incluidos en la ruta de clase (`<scope> sistema</scope>`)
- 21. Etiquetas internacionalizadas en JSF/Facelets
- 22. Archivos JS incluidos dos veces en la aplicación de raíles
- 23. Almacenar contenido web en un archivo JAR
- 24. ¿Cómo incluyo archivos JAR externos en mi propio proyecto JAR
- 25. Crear un SDK (archivo jar individual) con archivos "so"
- 26. ¿Cómo empacar los archivos JAR de terceros en un contenedor EJB?
- 27. ¿Cómo combinar los archivos jar de módulo en un único contenedor en Maven2?
- 28. archivos jar de Java en un repositorio (CVS, SVN ..)
- 29. ¿La manera más fácil de empaquetar/minificar múltiples archivos javascript?
- 30. ¿Cómo modularizar una aplicación JSF/Facelets/Spring con OSGi?
Este enfoque no ha funcionado en JBoss 6 (Mojarra 2.0.1). He probado en Tomcat 7 y Glassfish 4, y ambos funcionan. JBoss lanza esta excepción: 'java.io.FileNotFoundException \t org.apache.naming.resources.DirContextURLConnection.getInputStream (DirContextURLConnection.java: 369) ' –
@Rafael: http://stackoverflow.com/a/6201044 – BalusC
¡Impresionante! ¡Ahora funciona como un encanto! Muchas gracias @BalusC. –