如何在多次战争之间共享一个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.xml
或web.xml
javax.faces.FACELETS_RESOURCE_RESOLVER com.example.FaceletsResourceResolver