我无法在war文件中打包taglibrary。我将标签从项目移动到当前项目依赖的额外库。我将taglibrary文件放入包含标签的jar的META-INF
目录中(如何描述here)。但页面不起作用:
Expression Error: Named Object: eu.barbucha.barbatag.simple.PropertyTag not found.
服务器能够找到taglibrary。否则页面有效,只显示一个警告:
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。
答案 0 :(得分:3)
您需要在JAR中提供/META-INF/faces-config.xml
文件,以便让JSF扫描JAR文件以查找具有JSF特定注释的类,如@FacesComponent
。这样做是为了防止JSF不必要地扫描每个JAR文件的类(如果你有很多的话,这可能是非常耗费时间和CPU消耗的。)