我正在使用 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.我错过了什么?
答案 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
。