如何将注解与 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? [复制]