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

时间:2010-08-20 13:47:57

标签: jsf jsf-2 jar facelets modularity

是否可以将具有公共内容的JSF2 Facelets文件放入JAR中,以便从其他Web应用程序中使用它。 <ui:composition template><ui:include src><cc:implementation>等?如果是,我怎样才能实现这一目标?是否需要一些额外的配置?

4 个答案:

答案 0 :(得分:30)

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

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
 :

然后可以按如下方式获得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" />
...

如果你想要触发JSF2注释扫描程序,那么你也可以在该项目中放置@ManagedBean@FacesValidator@FacesConverter和consorts,然后创建一个兼容JSF2的{ {1}}档案:

/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> 中,或者当您没有使用Servlet 3.0但是2.5,或者您正在使用早期的JBoss / JSF版本时,才需要Facelets资源解析器。在META-INF资源解析中存在缺陷。另请参阅How to create a modular JSF 2.0 application?以获取具体示例。

答案 1 :(得分:4)

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

一个通用的解决方案如下:

在你的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文件

通过“http://&lt; domain&gt; /&lt; web-root&gt; /&lt; jsf-servlet&gt; / resource /&lt; file.xhtml&gt;”访问它(例如。http://localhost/faces/resource/test.xhtml)并且它将被渲染。

答案 2 :(得分:1)

首先在此处阅读类似问题中的difference between war and jar

您必须创建EAR文件并将战争打包在一起。

答案 3 :(得分:0)

Maven

请注意,如果您使用 Maven 创建 JAR,则应使用以下文件夹将您的资源放入:

src/main/resources/META-INF/resources/