2010-08-20 3 views
19

Возможно ли разместить файлы JSF2 Facelets с общим контентом в JAR, чтобы использовать его из других веб-приложений внутри, например. <ui:composition template>, <ui:include src>, <cc:implementation>, и т.д.? Если да, как я могу это достичь? Требуется ли дополнительная настройка?Упаковка Файлы Facelets (шаблоны, включая, композиты) в JAR

ответ

29

Вы можете поместить общие ресурсы в папку /META-INF/resources JAR, которая должна обрабатываться как /WEB-INF/resources папка 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 
: 

Ресурсы ЕАО будет доступен в следующем:

<... 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 и супруг в том, что проект, а также, а затем создать 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 ресурс resolver необходим, только если ресурсы не находятся в /META-INF/resources по какой-либо причине или когда вы не используете Servlet 3.0, но 2.5, или когда вы используете раннюю версию JBoss/JSF, которая имеет ошибки в разрешении ресурсов META-INF. См. Также How to create a modular JSF 2.0 application? для конкретного примера.

+0

Этот подход не работал на JBoss 6 (Mojarra 2.0.1). Я тестировал Tomcat 7 и Glassfish 4, и оба они работали. JBoss генерирует это исключение: 'java.io.FileNotFoundException \t org.apache.naming.resources.DirContextURLConnection.getInputStream (DirContextURLConnection.java: 369) ' –

+1

@Rafael: http://stackoverflow.com/a/6201044 – BalusC

+0

Впечатляет! Теперь работает как шарм! Большое спасибо @BalusC. –

1

В этом же вопросе, пожалуйста, прочитайте здесь difference between war and jar.

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

+0

Хорошо, но я не понимаю: могу ли я поместить .war в папку библиотеки нового веб-приложения и включить веб-страницы из .war в другие страницы? – Fabio

+0

спасибо за ваше время :) – Fabio

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> 

В любом JAR внутри WAR место XHTML-файлы в каталоге/META-INF/ресурсы/<file.xhtml>

к нему доступ через «HTTP : // домен < >/< веб-корень >/< JSF-сервлет >/ресурс/<file.xhtml> "(например, http://localhost/faces/resource/test.xhtml.) и воздастся.

Смежные вопросы