如何使用存储在共享jar中的JSF模板?

如何使用存储在共享jar中的JSF模板?,jsf,Jsf,我正在尝试将一组JSF模板和其他资源存储在一个.jar文件中,几个Web应用程序将从该文件中提取。我发现了这个,它似乎为我正试图做的事情提供了指导。然而,虽然我可以从共享jar加载图像,但我无法让JSF模板工作。我得到一个找不到文件的错误 我使用的是OpenLiberty 18.0.0.4,jar存储在${server.config.dir}/lib/global目录中,据我所知,该目录使所有Web应用程序都可以使用其内容 下面是共享jar的jartf的输出 META-INF/MANIFEST.

我正在尝试将一组JSF模板和其他资源存储在一个.jar文件中,几个Web应用程序将从该文件中提取。我发现了这个,它似乎为我正试图做的事情提供了指导。然而,虽然我可以从共享jar加载图像,但我无法让JSF模板工作。我得到一个找不到文件的错误

我使用的是OpenLiberty 18.0.0.4,jar存储在
${server.config.dir}/lib/global
目录中,据我所知,该目录使所有Web应用程序都可以使用其内容

下面是共享jar的
jartf
的输出

META-INF/MANIFEST.MF
META-INF/resources/common/images/ufo.png
META-INF/resources/common/jsf/template.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Title from template</title>
    </h:head>
    <h:body>
        This is content from the template<br/>
    </h:body>
</html>
这是来自共享jar的
模板.xhtml

META-INF/MANIFEST.MF
META-INF/resources/common/images/ufo.png
META-INF/resources/common/jsf/template.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Title from template</title>
    </h:head>
    <h:body>
        This is content from the template<br/>
    </h:body>
</html>
imageTest.xhtml
只显示共享jar中的
ufo.png
,这个facelet可以正常工作

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Test Image</title>
    </h:head>
    <h:body>
        I can see this image.<br/>
        <h:graphicImage library="common" name="images/ufo.png" alt="ufo"/>
    </h:body>
</html>
localTemplate.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    <h:body>
        <ui:composition template="localTemplate.xhtml" />
    </h:body>
</html>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Title from local template</title>
    </h:head>
    <h:body>
        This is content from the LOCAL template<br/>
    </h:body>
</html>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    <h:body>
        <ui:composition template="/common/jsf/template.xhtml" />
    </h:body>
</html>
当我试图在浏览器中访问
sharedJarJSFText.xhtml
时,我遇到以下错误

/common/jsf/template.xhtml Not Found in ExternalContext as a Resource

viewId=/sharedJarJSFTest.xhtml
location=/home/jmac/Programming/NetBeansProjects/TestJSFWebApp/src/main/webapp/sharedJarJSFTest.xhtml
phaseId=RENDER_RESPONSE(6)

Caused by:
java.io.FileNotFoundException - /common/jsf/template.xhtml Not Found in ExternalContext as a Resource
at org.apache.myfaces.view.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:300)
我想我是按照上面链接的说明来回答的,所以我不知道为什么这不起作用

在另一个例子中,用户BalusC解释说,由于Servlet3.0规范编写自定义
ResourceResolver
是不必要的。这个版本的OpenLiberty使用Servlet4.0规范

如果有帮助,以下是此Open Liberty服务器的
server.xml
功能列表

<featureManager>
    <feature>jsp-2.3</feature>
    <feature>jsf-2.3</feature>
</featureManager>

jsp-2.3
jsf-2.3

提前感谢您的建议。

对不起,我误读了您的问题。没问题。我感谢你的迅速答复。这基本上是一个重复的问题,但我无法得到重复问题的答案。我怀疑我使用开放自由是错误的,所以我可能会问,我如何使用开放自由?我想也许我没有激活我需要的功能。但我刚刚在Payara 5上试过,我遇到了同样的问题。我可以从共享jar获得一个图像,但不能从JSF模板获得。不过,我想我忽略了一些非常基本的东西。试着在你的战争中加入罐子。它可能只是在“全局”文件夹中不起作用。罐子里有(空的)faces配置,xml吗?对不起,我误读了你的问题,没问题。我感谢你的迅速答复。这基本上是一个重复的问题,但我无法得到重复问题的答案。我怀疑我使用开放自由是错误的,所以我可能会问,我如何使用开放自由?我想也许我没有激活我需要的功能。但我刚刚在Payara 5上试过,我遇到了同样的问题。我可以从共享jar获得一个图像,但不能从JSF模板获得。不过,我想我忽略了一些非常基本的东西。试着在你的战争中加入罐子。它可能只是在“全局”文件夹中不起作用。jar中有(空的)faces配置xml吗?