加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:07:42 所属栏目:Java 来源:网络整理
导读:我正在尝试在多个战争之间共享一个错误页面(error.xhtml).他们都在一个大耳朵应用程序,并且都使用一个通用的jar库,我想在这里. 错误页面应该使用web.xml或更好的web-fragment.xml,并且将被声明为标准的java ee错误页面. 实际EAR结构: EAR EJB1 EJB2 WAR1 (u
我正在尝试在多个战争之间共享一个错误页面(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 /资源下就不起作用,因为它不是资源.

我想尽可能少的配置在每个战争文件.

我使用的是Glassfish 3.1,但是尽可能地使用Java EE 6标准.

解决方法

您需要创建一个自定义的 ResourceResolver,它可以从classpath解析资源,将其放在通用的JAR文件中,然后在JAR的web-fragment.xml(或WARs的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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读