使用通配符加载facelet标记库

时间:2013-02-04 09:01:53

标签: jsf-2 tomcat6 facelets

我正在使用 JSF 2 和我自己构建的facelet标签,我在taglib文件中定义了这些标签,名为 xxxx.taglib.xml 。该项目分为战争模块,在构建时由Maven合并。所以每个项目都有自己的taglibs,我希望在生成的项目中拥有所有项目。这就是问题,有没有办法使用通配符使用 web.xml 中的单个表达式访问每个taglib文件?与此类似:

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

另见: