在JAR中打包Facelets文件(模板,包含,合成)

是否有可能将JSF2 Facelets文件与通用内容放入JAR中,以便在<ui:composition template><ui:include src><cc:implementation>等其他web应用程序中使用它。 如果是的话,我怎么能做到这一点? 是否需要一些额外的configuration?

您可以将公共资源放在JAR的/META-INF/resources文件夹中,该文件夹被视为WAR的/WEB-INF/resources文件夹。

例如

 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 : 

JAR的资源可用如下:

 <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" /> ... 

如果您想要触发JSF2注释扫描器,那么您可以将@FacesValidator@FacesConverter @FacesValidator@FacesConverter和配合放在该项目中,然后创build一个兼容JSF2的/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> 

Facelets资源parsing器只有在资源不在/META-INF/resources出于某种原因,或者当你不使用Servlet 3.0而是使用2.5时,或者当你使用早期的有错误的JBoss / JSF版本在META-INF资源parsing中。 另请参见如何创build模块化的JSF 2.0应用程序? 作为一个具体的例子。

是的,您可以扩展com.sun.faces.facelets.impl.DefaultResourceResolver以向JSF提供资源。

一个通用的解决scheme如下:

在你的pom.xml中添加:

  <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> 

或者直接将https://intersult.com/svn/public/maven/com/intersult/jsf-desktop/1.1-SNAPSHOT/jsf-desktop-1.1-SNAPSHOT.jar添加到您的/ WEB-INF / lib文件夹中。

在你的web.xml中添加:

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

在WAR中的任何JAR中放置/ META-INF / resources / <file.xhtml>下的XHTML-Files

通过“http:// <domain> / <web-root> / <jsf-servlet> / resource / <file.xhtml>”(例如http://localhost/faces/resource/test.xhtml )它会被渲染。

首先在这里读一下类似问题的战争与jar之间的区别 。

您将不得不创buildEAR文件并将战争打包在一起。