我已经阅读了教程: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 。
答案 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/显示了这是如何运作的。