JSF页面没有从CDI bean中检索变量

时间:2012-09-10 21:27:58

标签: java-ee jsf-2 websphere cdi

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

测试使用的是Apache MyFaces 2.1.5,并且正在WebSphere Application Server 8.5上运行。

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

测试中文件的内容如下

test.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文件。

3 个答案:

答案 0 :(得分:3)

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

有关详细信息,请参阅CDI integration with JavaServer Faces

答案 1 :(得分:0)

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

您可以在ICEFACES JIRA here

上阅读有关这些问题的信息

答案 2 :(得分:0)

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