【问题标题】:How to mix annotations with faces-config.xml如何将注解与 faces-config.xml 混合
【发布时间】:2011-11-23 01:34:38
【问题描述】:

使用 JBoss 6.0.0.Final、Richfaces 3.3.3.Final、MyFaces 2.0.6、facelets 1.1.15.B1(RF 3 的限制)。

我正在进行一个遗留项目,其中包含在faces-config.xml 中定义的数百个 bean。我想保留 faces-config.xml 中定义的那些,但对新 bean 使用注释。但是,当我尝试过这个时,我没有成功。注释定义的bean,即

@ManagedBean
@ViewScoped
public class Foobar implements Serializable {
    // ...
}

无法从我的 JSF 页面访问 bean。我相信我已经使用正确的标头在我的 faces-config.xml 中指定了 2.0 版本。

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">

我还需要在faces-config.xml 中做些什么来允许使用注释吗?

【问题讨论】:

    标签: jsf jsf-2 richfaces


    【解决方案1】:

    注解的bean在以下情况下会失败:

    1. /WEB-INF/faces-config.xml 未声明为符合 JSF 2.0。

    2. @ManagedBean 属于javax.annotation 包而不是javax.faces.bean

    3. Bean 类未编译/构建到 WAR 的 /WEB-INF/classes

    4. Bean 被打包在一个缺少/META-INF/faces-config.xml 的JAR 文件中。

    5. 在 EL 中使用了错误的托管 bean 名称,根据 Javabeans 规范,它应该是第一个字符小写的 bean 类名称。因此,在您的特定示例中,#{fooBar} 应该可以工作,但 #{FooBar} 不会。

    6. Webapp 实际上使用 JSF 1.x 库(您可以在服务器启动日志中阅读 JSF 版本)。

    【讨论】:

    • 抱歉,我应该指定我不会尝试对同一个 bean 同时使用 annotation 和 faces-config.xml 配置。我想添加新 bean 而不必使用 faces-config.xml 迁移旧 bean
    猜你喜欢
    • 2011-07-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2013-01-27
    • 2013-12-24
    相关资源
    最近更新 更多