共享库中的Common Facelets文件JAR在/ WEB-INF / lib之外

时间:2014-09-24 18:21:31

标签: jsf-2 jar shared-libraries facelets filenotfoundexception

我有一个公共共享库(在Websphere应用程序服务器中设置为共享库)。

该jar的文件夹结构是:

UtilityJAR
----src
       -com
          -test
            -TestClass.java
---- META-INF
       -resources    
          -template.xhtml
          -css
             -style.css

在我的网站项目中,我有一个名为User.xhtml的模板客户端文件,该文件使用上述共享库中的模板文件

ui:composition  template="/template.xhtml"

当我在Web应用程序的WEB-INF / lib文件夹中有上述jar文件时,应用程序正常工作没有任何问题(可识别template.xhtml)。当我从这个应用程序的Lib文件夹中删除jar并将其作为Websphere中的共享库时(因为我需要来自4个以上应用程序的jar文件,我不想在所有4个应用程序中复制这个jar),我收到以下错误消息。

[9/24/14 14:09:17:936 EDT] 00000113 ServletWrappe E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0014E: Uncaught service() exception root cause Faces Servlet: java.io.FileNotFoundException: /template.xhtml Not Found in ExternalContext as a Resource

Utility jar中有faces-config,当jar在应用程序的WEB-INF / lib文件夹中时,它有@ManagedBean注释。

之前有人遇到过这个问题吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

将包含webapp资源必须的Web片段JAR放在webapp的/WEB-INF/lib中。

Servlet 3.0 specification第37页(强调我的):

  

4.6资源

     

...

     

getResourcegetResourceAsStream方法采用带有前导的String   “/”作为参数,给出资源相对于根的路径   上下文或相对于内部的JAR文件的META-INF / resources目录   Web应用程序的WEB-INF / lib目录。这些方法将首先搜索根   在查看任何资源之前,请求资源的Web应用程序上下文   WEB-INF / lib目录中的JAR文件。 JAR文件的顺序   未定义扫描WEB-INF / lib目录。这种文件层次结构可以   存在于服务器的文件系统中,Web应用程序归档文件中,远程服务器上,   或在其他地方。

     

...

如果你真的想把它们放在别处(坏主意!),那么你需要自己生成一个自定义的Facelets资源解析器。您可以在此处找到启动示例:How to create a modular JSF 2.0 application?

另见: