1

我有一个模块化的 JSF 应用程序。Facelets 存储在 META-INF/resources 中的模块中。我添加了一个自定义 FaceletsResourceResolver(如这篇文章中演示的如何创建模块化 JSF 2.0 应用程序?),所有这些都适用于 .xhtml - 文件。现在我正在尝试以相同的方式添加其他资源,但它不起作用。

假设我在模块中有这个结构:

/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 进行开发。

4

1 回答 1

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

也可以看看:

于 2013-09-17T15:11:43.240 回答