我正在尝试在多个 war 之间共享一个错误页面 (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
它从类路径中解析资源,将其放入公共(public) 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
<context-param>
<param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
<param-value>com.example.FaceletsResourceResolver</param-value>
</context-param>
关于java - 如何在多个 war 之间共享一个jsf错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5379995/