我们正在将JSF1.2迁移到JSF2应用程序,我遇到了自定义组件的问题。我们有一个带有组件的独立罐子,在那个罐子里我有这个:
@FacesComponent(value = "Panel2")
public class Panel2 extends UIOutput { ... }
在META-INF下的我的taglib中我有:
<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
id="mw">
<namespace>http://www.ssss.be/jsf/mw</namespace>
<composite-library-name>mw</composite-library-name>
<tag>
<tag-name>panel2</tag-name>
<component>
<component-type>Panel2</component-type>
</component>
</tag>
</facelet-taglib>
制作了一个这样的罐子并在我的其他项目中使用它之后,我使用如下标签:
xmlns:mw="http://www.sofico.be/jsf/mw"
然后:
<mw:panel2 />
但遗憾的是结果:
javax.faces.FacesException: Expression Error: Named Object: Panel2 not found. at com.sun.faces.application.ApplicationImpl.createComponentApplyAnnotations(ApplicationImpl.java:1858)
at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:1129)
我在这里做错了什么?
答案 0 :(得分:8)
metadata-complete
属性设置为true。WEB-INF/classes
;或者,如果在WEB-INF/lib
的jar中,jar包含faces-config.xml(规范不需要注释扫描)Panel2
组件类型(此列表优先)见JSF 2 spec;第11.5.1节。