【问题标题】:Facelet Tag Library mechanism does not work as expectedFacelet 标记库机制未按预期工作
【发布时间】: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。

【问题讨论】:

标签: jsf-2 glassfish-3


【解决方案1】:

您需要在 JAR 中提供一个 /META-INF/faces-config.xml 文件,以便让 JSF 扫描 JAR 文件以查找带有 JSF 特定注释(如 @FacesComponent)的类。这样做是为了防止 JSF 不必要地扫描每个单独的 JAR 文件以查找类(如果有很多类,这可能会非常耗费时间和 CPU)。

【讨论】:

  • 谢谢。 taglib JAR 的META-INF 目录中的空faces-config.xml(仅包含&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" version="2.0"&gt;&lt;/faces-config&gt;)解决了我的问题。
猜你喜欢
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多