jakarta-ee - JSF 页面未从 CDI bean 检索变量

标签 jakarta-ee jsf-2 websphere cdi

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

该测试使用 Apache MyFaces 2.1.5 并在 WebSphere 应用程序服务器 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 文件。

最佳答案

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

CDI integration with JavaServer Faces了解更多详情。

关于jakarta-ee - JSF 页面未从 CDI bean 检索变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12359735/

相关文章:

java.lang.ClassCastException : oracle. j2ee.ws.saaj.soap.TextImpl 无法转换为 javax.xml.soap.SOAPElement

jakarta-ee - Java/Java EE 面试的管理层

jsf-2 - p :selectBooleanCheckbox and the label attached to it

java - Java中如何在用户不再活跃时自动使 session 失效?

java - JSF 2 : invoking managed bean directly

jsf - 如何更改 p :datatable dynamically 的延迟加载的 setRowCount

java - SAX 解析异常 : The prefix "xsi" for attribute "xsi:schemaLocation" is not bound

deployment - RAD 未将 EAR 项目添加到 WAS 实例

ssl - Websphere 应用程序服务器 6.1 中的 j2ee 客户端身份验证支持

jakarta-ee - Glassfish 4.1 中 Amazon s3 上传 API 的 Jackson 版本