在模块化JSF 2.2.x应用程序中查找Javascript和其他资源

时间:2013-09-17 13:48:49

标签: jsf-2 tomcat6 jsf-2.2

我有一个模块化的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进行开发。

1 个答案:

答案 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的实际值的含义。

另见: