我有一个模块化的JSF应用程序。 Facelets存储在META-INF / resources中的模块中。我添加了一个自定义FaceletsResourceResolver(如本文How to create a modular JSF 2.0 application?中所示),所有这些都适用于.xhtml - Files。现在我试图以相同的方式添加其他资源,但它不起作用。
假设我在模块中有这个结构:
/META-INF/resources
/META-INF/resources/foo
/META-INF/resources/foo/bar.xhtml
/META-INF/resources/foo/bar.js
现在应用程序解析/foo/bar.xhtml就好了。但尝试获取/foo/bar.js只是失败了404.我尝试使用
<h:outputScript library="modulename" name="foo/bar.js" />
以及直接参考
<script language="text/javascript" src="/context/foo/bar.js"/>
两个都无济于事。我觉得我错过了什么。有人能帮助我吗?
PS:使用Apache Tomcat 6和Eclipse-Juno进行开发。
答案 0 :(得分:0)
我会忽略这样一个事实,即你当前形式的问题中提到的版本令人困惑。 JSF 2.2(标记为)需要最少的Servlet 3.0。 Tomcat 6(正如你所提到的)是一个Servlet 2.5容器(也是一个非常古老的容器)。这不是一起工作的。还要注意的是,您在那里找到的FaceletsResourceResolver
仅在您使用Servlet 2.5或使用非常早期的JBoss AS 6版本时才需要。
这里的库名称不代表JAR文件名,而是所有这些资源通常属于的子文件夹。所以,当你有一个
<h:outputScript library="modulename" name="foo/bar.js" />
然后在JAR中预期以下结构:
/META-INF/resources/modulename
/META-INF/resources/modulename/foo
/META-INF/resources/modulename/foo/bar.xhtml
/META-INF/resources/modulename/foo/bar.js
或者,您可以保留原始结构并使用
<h:outputScript library="foo" name="bar.js" />
取决于foo
的实际值的含义。