4

我正在尝试使用 JSF 和 CDI 创建一个简单的“hello world”测试,但是 JSF 页面没有显示来自 CDI bean 的变量。如果 bean 更改为托管 bean,则显示该变量。

该测试使用 Apache MyFaces 2.1.5 并在 WebSphere 应用程序服务器 8.5 上运行。

毫无疑问,这个问题有一个简单的原因,但我无法确定为什么这适用于托管 bean 而不是 CDI bean。有人可以建议我哪里出错了吗?

测试中的文件内容如下

测试.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">

<h:body>
    <h:outputText>#{testBean.myval}</h:outputText>
</h:body>
</html>

TestBean.java

import javax.inject.Named;
import javax.enterprise.context.RequestScoped;

@Named
@RequestScoped
public class TestBean {
    private String myVal = "Hello World";

    public String getMyVal() {
        return myVal;
    }

    public void setMyVal(String myVal) {
        this.myVal = myVal;
    }
}

我还在 WEB-INF 中创建了一个空 beans.xml 文件。

4

3 回答 3

3

在 WebSphere 论坛上发布了一个类似的问题,发现只有默认的 JSF 实现(基于 MyFaces)支持与 CDI 一起使用。

有关更多详细信息,请参阅CDI 与 JavaServer Faces的集成。

于 2012-09-19T08:53:42.380 回答
0

看起来 WAS8 支持 MyFaces 2.0.x 并且在使用 2.1.x 时确实会导致 CDI 出现问题。因此,您最好的选择是降级到 2.0.x,直到支持 2.1.x。

您可以在此处阅读有关 ICEFACES JIRA 的这些问题

于 2012-09-11T01:26:23.353 回答
0

看起来您在 xhtml 页面中使用了错误的大小写。应该是 myVal 而不是 myval。

于 2012-09-11T21:06:26.877 回答