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

Fab*_*bio 19 jsf modularity jar facelets jsf-2

是否有可能把JSF2 Facelets文件与普通的内容为JAR从内部如其他Web应用程序中使用<ui:composition template>,<ui:include src>,<cc:implementation>等?如果是,我怎样才能实现这一目标?是否需要一些额外的配置?

Bal*_*usC 31

您可以将公共资源放在/META-INF/resourcesJAR 的文件夹中,该文件夹将被视为/WEB-INF/resourcesWAR的文件夹.

例如

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
 :
Run Code Online (Sandbox Code Playgroud)

然后,JAR的资源如下:

<... 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" />
...
Run Code Online (Sandbox Code Playgroud)

如果要触发JSF2注释扫描仪,以及让你可以把@ManagedBean,@FacesValidator,@FacesConverter并在该项目中的一致为好,然后创建一个兼容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>
Run Code Online (Sandbox Code Playgroud)

Facelets资源解析器仅在资源/META-INF/resources由于某种原因不存在时,或者当您不使用Servlet 3.0而不是2.5时,或者当您使用早期的JBoss/JSF版本时,它需要META-INF资源解析中的错误.另请参见如何创建模块化JSF 2.0应用程序?举一个具体的例子.