java - 如何在多个 war 之间共享一个jsf错误页面

标签 java jsf jakarta-ee jsf-2 facelets

我正在尝试在多个 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.xmlweb.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/

相关文章:

java - 打不开页面,android studio

java - primefaces 效果不起作用

java - 在输入文本框中隐藏事件

java - JAX-RS 使用的无状态 EJB 中的 @Context 注入(inject)

java - 是重载该方法更好,还是使用可变参数传递 0 到 1 个变量? java

java - 分析 Heapdump 文件的最佳格式是什么?是hprof吗?

Java fork/join 框架逻辑

java - JSF 中的多个页面不调用支持 bean 更改器(mutator)

java - WebLogic Server::服务器不支持 J2EE Web 模块规范的 3.0 版

java - 与 Java EE 一起使用的最佳 LDAP 服务器