как разделить страницу с ошибкой jsf между несколькими войнами - PullRequest
13 голосов
/ 21 марта 2011

Я пытаюсь поделиться страницей ошибок (error.xhtml) между несколькими войнами.Все они находятся в приложении большого уха, и все используют общую библиотеку jar, куда я хотел бы поместить это.

Страница ошибки должна использовать web.xml, или лучше web-фрагмент.xml, ибудет объявлено как стандартная страница ошибки Java ee.

Фактическая структура EAR:

EAR
 EJB1
 EJB2
 WAR1 (using CommonWeb.jar)
 WAR2 (using CommonWeb.jar)
 WAR3 (using CommonWeb.jar)

Простое помещение страницы ошибки в META-INF / resources не будет работать, так как это нересурс.

Я хотел бы иметь как можно меньше настроек для каждого файла войны.

Я использую Glassfish 3.1, но хотел бы использовать стандарты Java EE 6 в той же степени, что ивозможно.

1 Ответ

21 голосов
/ 21 марта 2011

Вам необходимо создать пользовательский ResourceResolver, который разрешает ресурсы из classpath, помещает его в общий файл JAR и затем объявляет его в web-fragment.xml JAR (или в web.xmlWARS).

Пример запуска:

package com.example;

import java.net.URL;

import javax.faces.view.facelets.ResourceResolver;

public class FaceletsResourceResolver extends ResourceResolver {

    private ResourceResolver parent;
    private String basePath;

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

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

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

        return url;
    }

}

с web-fragment.xml или web.xml

<context-param>
    <param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
    <param-value>com.example.FaceletsResourceResolver</param-value>
</context-param>
...