是否有必要在facelet taglib 2.0中声明标签?

时间:2013-02-28 09:24:21

标签: jsf-2 facelets taglib

我已经阅读了教程: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.0 MyFaces 2.0.7

1 个答案:

答案 0 :(得分: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/显示了这是如何运作的。