Jsf 2 使用通配符加载facelet标记库

Jsf 2 使用通配符加载facelet标记库,jsf-2,tomcat6,facelets,Jsf 2,Tomcat6,Facelets,我将JSF2与我自己构建的facelet标记一起使用,并且在名为xxxx.taglib.xml的taglib文件中定义了这些标记。该项目分为war模块,在构建时由Maven合并。因此,每个项目都有自己的标记库,我希望所有标记库都包含在结果项目中。这就是问题所在,是否有一种方法可以使用通配符,使用web.xml中的单个表达式访问每个taglib文件?与此类似: <context-param> <param-name>facelets.LIBRARIES</pa

我将JSF2与我自己构建的facelet标记一起使用,并且在名为xxxx.taglib.xml的taglib文件中定义了这些标记。该项目分为war模块,在构建时由Maven合并。因此,每个项目都有自己的标记库,我希望所有标记库都包含在结果项目中。这就是问题所在,是否有一种方法可以使用通配符,使用web.xml中的单个表达式访问每个taglib文件?与此类似:

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

facelets.LIBRARIES
类路径*:***/*.taglib.xml

这将从/WEB-INF/classes目录中加载以.taglib.xml结尾的每个文件,但它不起作用。我正在使用Tomcat6。我遗漏了什么?

这是无效的语法。它必须是webcontent相对路径,以分号分隔。您的项目和模块/构建设置可能不完全正确

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

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

顺便说一下,
facelets.LIBRARIES
是特定于facelets 1.x的,在JSF2.x中不推荐使用。改用
javax.faces.FACELETS\u库

另见:

BalusC,非常感谢您的回答,我将taglib放在一个单独的项目中,并最终保存在一个JAR文件中。但是我想问你们,你们认为把我所有的模块项目放在jar文件中肯定是更好的做法吗?我的意思是,我的一些模块将比基本系统本身更大,而且我还构建了一系列模块来维护web项目的结构。在我使用Maven覆盖将它们与基本系统合并之后。通过这种方式,我还可以让模块的JSF注释在没有更多配置的情况下工作。只需按照规范建议的正确方式进行即可。