Как использовать композицию Facelets с файлами из другого контекста

У меня есть приложение, использующее композицию (для шаблонов страниц). Но мы думаем при создании веб-приложения (войны) размещать все шаблоны, общие для всех приложений, на одном хосте всех приложений.

Как включить шаблон из другого контекста? В это время я использую импорт из http-запроса. Но это звучит как плохо.

<ui:composition template="http://localhost:8080/templates/layout/foo.xhtml">

Я использую JBoss Seam 2.x с JSF 1.


person Otávio Garcia    schedule 07.04.2011    source источник


Ответы (1)


Обратите внимание, что в JSF 2.x Facelets это делается по-другому, см. этот ответ для подробностей.

Это возможно с помощью пользовательского преобразователя ресурсов Facelets. Я бы только разрешал их не по HTTP, а просто из пути к классам. Просто упакуйте общие шаблоны, например, в папку /META-INF/resources файла JAR и поместите класс преобразователя в тот же JAR. Наконец, распространите этот JAR среди всех веб-приложений.

package com.example;

import java.net.URL;

import com.sun.facelets.impl.DefaultResourceResolver;

public class FaceletsResourceResolver extends DefaultResourceResolver {

    private String basePath;

    public FaceletsResourceResolver() {
        this.basePath = "/META-INF/resources"; // TODO: Make configureable?
    }

    public URL resolveUrl(String path) {
        URL url = super.resolveUrl(path); // Resolves from WAR.

        if (url == null) {
            url = getClass().getResource(basePath + path); // Resolves from JAR.
        }

        return url;
    }

}

Зарегистрируйте его в web.xml следующим образом:

<context-param>
    <param-name>facelets.RESOURCE_RESOLVER</param-name>
    <param-value>com.example.FaceletsResourceResolver</param-value>
</context-param>
person BalusC    schedule 08.04.2011
comment
Спасибо @BalusC. Я использую JBoss Seam 2.x с JEE 5 и не могу найти класс ResourceResolver. - person Otávio Garcia; 08.04.2011
comment
@BalusC: я вижу, что ResourceResolver устарел. - person Farhan Shirgill Ansari; 23.07.2016
comment
@Shirgill: это устарело только в JSF 2.2. Этот ответ предназначен для JSF 1.x. - person BalusC; 23.07.2016