1

我将JSF 2与我自己构建的 facelet 标签一起使用,并且我在 taglib 文件中定义了该标签,名为xxxx.taglib.xml。该项目分为war模块,在构建时由Maven合并。所以每个项目都有他自己的标签库,我希望将它们全部包含在生成的项目中。那么问题来了,有没有办法使用通配符访问每个 taglib 文件,使用web.xml中的单个表达式?与此类似:

<context-param>
    <param-name>facelets.LIBRARIES</param-name>
    <param-value>classpath*:**/*.taglib.xml</param-value>
</context-param>

这应该从/WEB-INF/classes目录加载每个以.taglib.xml结尾的文件,但它不起作用。我正在使用 Tomcat 6。我错过了什么?

4

1 回答 1

3

这不是有效的语法。它必须是 webcontent-relative 路径,用分号分隔。您的项目和模块/构建设置可能并不完全正确。

只需创建一个以 JAR 结尾的独立 Java 项目,/WEB-INF/lib并将 taglib 文件放入/META-INF文件夹中。JSF 还将扫描每个 JAR(/WEB-INF/lib如果有)/META-INF/*.taglib.xml,然后自动注册它。为此,您不需要facelets.LIBRARIES上下文参数。将 Web 资源(如 XHTML 文件)放在/META-INF/resources文件夹中。请注意,这也是 PrimeFaces 等组件库的工作方式。

您可能需要更改 Maven 以修复错误的构建方法。它应该构建模块项目的 JAR 并将它们放入/WEB-INF/lib目标 WAR 文件中,并且绝对不会将来自单独项目的松散文件合并/覆盖在一个大/WEB-INF/classes文件夹中。

顺便说一句,它facelets.LIBRARIES是 Facelets 1.x 特有的,在 JSF 2.x 中已弃用。改用javax.faces.FACELETS_LIBRARIES.

也可以看看:

于 2013-02-04T12:32:13.000 回答