在jar中找不到带注释的自定义JSF2组件

时间:2011-05-27 10:24:18

标签: java jsf jsf-2 custom-component

我们正在将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)

我在这里做错了什么?

1 个答案:

答案 0 :(得分:8)

  • 确保faces-config.xml中的JSF版本至少为版本2
  • 确保faces-config.xml中没有metadata-complete属性设置为true。
  • 确保该课程在WEB-INF/classes;或者,如果在WEB-INF/lib的jar中,jar包含faces-config.xml(规范不需要注释扫描)
  • 确保XML配置文件中没有定义Panel2组件类型(此列表优先)

JSF 2 spec;第11.5.1节。