如何将注解与 faces-config.xml 混合

Posted

技术标签:

【中文标题】如何将注解与 faces-config.xml 混合【英文标题】:How to mix annotations with 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 中做些什么来允许使用注释吗?

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

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

【讨论】:

抱歉,我应该指定我不会尝试对同一个 bean 同时使用 annotation 和 faces-config.xml 配置。我想添加新 bean 而不必使用 faces-config.xml 迁移旧 bean

以上是关于如何将注解与 faces-config.xml 混合的主要内容,如果未能解决你的问题,请参考以下文章

文件无法验证为XML定义,如何修复faces-config.xml警告?

无法在 JSF 应用程序中解析文档 faces-config.xml

2.1 版的 faces-config.xml xsd 错误

在 JSF、Spring、Spring-Security 项目中是不是需要 faces-config.xml? [复制]

JSF 面对 WEB-INF 之外的配置文件?

Maven tomcat:run 目标和基于 jsf 注解的组件/转换器/验证器扫描