2

我已经阅读了教程: http: //jsflive.wordpress.com/2011/03/24/custom-component-library/,其中作者正在制作空.taglib.xml文件,并且根据教程,标签应该从资源子文件夹。

但是,对我来说,我有例外:

javax.faces.FacesException:无法获取 myComponent.xhtml 的组件元数据

我必须手动指定每个标签:

<tag>
    <tag-name>myComponent</tag-name>
    <source>tags/mylib/myComponent.xhtml</source>
</tag>

我错过了什么吗?标签定义位置会在哪里自动解析?我在WebSphere 7.0MyFaces 2.0.7上运行。

4

1 回答 1

2

我想你把事情搞混了。在我上面提到的博客文章中,我将复合组件添加到标签库中,如下所示:

<facelet-taglib>
  <namespace>http://jsflive.at/taglib</namespace>
  <composite-library-name>jsflive</composite-library-name>
</facelet-taglib>

这将添加资源库的所有复合组件,其名称在composite-library-name. 标记名称是按照约定从文件名派生而来的。

相反,您可以为 Facelets 片段指定标签:

<tag>
  <tag-name>myComponent</tag-name>
  <source>tags/mylib/myComponent.xhtml</source>
</tag>

这与复合组件无关!这种方法是为 Facelets 片段定义自定义标记的 JSF 2.0 之前的方法。您的代码为引用的 xhtml 文件创建一个标签,该文件可以是任意 Facelets 文件。taglib.xml在这种情况下,路径是相对于文件的位置的。

然而,JSF 2.2 将提供一种为特定复合组件指定标签的方法。我的帖子http://jsflive.wordpress.com/2013/04/06/jsf22-cc-taglib/展示了它是如何工作的。

于 2013-04-30T08:03:33.163 回答