如何在多次战争之间共享一个jsf错误页面

我正试图在多次战争之间共享一个错误页面(error.xhtml)。 它们都是一个大耳朵应用程序,并且都使用一个常见的jar库,我想把它放在这里。

错误页面应使用web.xml或更好的web-fragment.xml,并将声明为标准java ee错误页面。

实际EAR结构:

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

只是将错误页面放在META-INF / resources下面是行不通的,因为它不是资源。

我想尽可能少地配置每个war文件。

我正在使用Glassfish 3.1,但我希望尽可能使用Java EE 6标准。

您需要创建一个自定义ResourceResolver ,它从类路径中解析资源,将其放在公共JAR文件中,然后在JAR的web-fragment.xml中(或在WAR的web.xml中)声明它。

开球示例:

 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.xmlweb.xml

  javax.faces.FACELETS_RESOURCE_RESOLVER com.example.FaceletsResourceResolver