【发布时间】:2012-01-26 11:30:26
【问题描述】:
我无法将 taglibrary 打包到 war 文件中。我将标签从项目移动到当前项目现在依赖的额外库。我将标签库文件放入包含标签的 jar 的META-INF 目录中(如何描述here)。但是页面不起作用:
Expression Error: Named Object: eu.barbucha.barbatag.simple.PropertyTag not found.
服务器能够找到标记库。否则页面可以正常工作,只会出现一个警告:
Warning: This page calls for XML namespace http://barbucha.eu/tags declared with prefix br but no taglibrary exists for that namespace.
因此问题是:为什么服务器只找到描述符,而不找到类?当我将类从 WEB-INF/lib/barbatag.jar 复制到 WEB-INF/classes 并在管理控制台中重新启动 webapp 时,页面开始工作。服务器也仅在它们直接涉及应用程序的类时才找到 UI 组件,而不是在存储在 WEB-INF/lib 目录中的 jar 中。另一方面,服务器从 jar 加载 taglib 描述符。真是令人困惑……关键类的声明:
package eu.barbucha.barbatag.simple;
@FacesComponent("eu.barbucha.barbatag.simple.PropertyTag")
public class PropertyTag extends UIComponentBase { ... }
关键标签的定义:
<tag>
<display-name>The component taking values from a property file</display-name>
<tag-name>property</tag-name>
<component>
<component-type>eu.barbucha.barbatag.simple.PropertyTag</component-type>
</component>
</tag>
有一点很重要:我使用的是 Spring MVC。
【问题讨论】:
-
我的标签库 JAR 似乎缺少
faces-config.xml文件。 JSF 规范不需要注解扫描。 (见Cannot find annotated custom JSF2 component in jar)
标签: jsf-2 glassfish-3