我有一个公共共享库(在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注释。
之前有人遇到过这个问题吗?谢谢你的帮助。
答案 0 :(得分:4)
将包含webapp资源必须的Web片段JAR放在webapp的/WEB-INF/lib
中。
从Servlet 3.0 specification第37页(强调我的):
4.6资源
...
getResource
和getResourceAsStream
方法采用带有前导的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?