Упаковка файлов Facelets (шаблоны, включает в себя, композиты) в JAR - PullRequest
19 голосов
/ 20 августа 2010

Можно ли поместить файлы JSF2 Facelets с общим содержимым в JAR, чтобы использовать его из других веб-приложений, например, <ui:composition template>, <ui:include src>, <cc:implementation> и т. Д.?Если да, как я могу этого достичь?Нужна ли какая-то дополнительная конфигурация?

Ответы [ 3 ]

30 голосов
/ 23 декабря 2011

Вы можете поместить общие ресурсы в папку /META-INF/resources JAR, которая должна рассматриваться как папка /WEB-INF/resources WAR.

Например,

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 и консорты в этом проектеа затем создайте файл /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>

Средство распознавания ресурсов Facelets необходимо только в том случае, если ресурсы по какой-то причине находятся не в /META-INF/resources или если вы не используете сервлет3.0, но 2.5, или когда вы используете более раннюю версию JBoss / JSF, в которой есть ошибки в разрешении ресурса META-INF.См. Также Как создать модульное приложение JSF 2.0? для конкретного примера.

4 голосов
/ 23 декабря 2011

Да, вы можете расширить 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>

В любом JAR внутри WAR-файла поместите XHTML-файлы в /META-INF/resources/

.

Доступ к нему через "http://///resource/" (например, http://localhost/faces/resource/test.xhtml), и он будет обработан.

1 голос
/ 22 августа 2010

Сначала прочитайте здесь о разнице между войной и банкой в аналогичном вопросе.

Вам нужно будет создать файл EAR и упаковать войны вместе.

...