我正在尝试在多次战争之间共享错误页面(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文件中,然后web- fragment.xml在JAR(或web.xmlWAR)中声明它。
ResourceResolver
web- fragment.xml
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; } }
与in web-fragment.xml或web.xml
web-fragment.xml
<context-param> <param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name> <param-value>com.example.FaceletsResourceResolver</param-value> </context-param>