Jsf 2 注入的cdi bean不';t保持变量

Jsf 2 注入的cdi bean不';t保持变量,jsf-2,dependency-injection,cdi,Jsf 2,Dependency Injection,Cdi,嗨,我已经用CDIBean尝试了@Inject注释。我在第一个bean中有一个变量,它被注入到第二个bean中。当我使用第一个bean中的变量调用第二个bean上的方法时,在该方法调用期间,第一个bean的变量返回null import java.io.Serializable; import javax.enterprise.context.SessionScoped; import javax.inject.Inject; import javax.inject.Named

嗨,我已经用CDIBean尝试了@Inject注释。我在第一个bean中有一个变量,它被注入到第二个bean中。当我使用第一个bean中的变量调用第二个bean上的方法时,在该方法调用期间,第一个bean的变量返回null

import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named
        @Named(value = "myBean2")
        @SessionScoped
        public class MyBean2 implements Serializable{
            String name;
            @Inject
            MyBean myBean;

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }


            public String print(){
                this.name = this.myBean.name;
                return null;
            }
            /**
             * Creates a new instance of myBean2
             */
            public MyBean2() {


    }
    }
这里是xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Experiments</title>
    </h:head>
    <h:body>
        <h:form id="main_form">
        <h:inputText id="nameInput" value="#{myBean.name}"></h:inputText>
        <h:commandButton value ="ok" action="#{myBean2.print()}">
            <f:ajax execute="nameInput" render="nameOutput"/>
        </h:commandButton>
        <h:outputText id ="nameOutput" value="#{myBean2.name}"/>
        </h:form>
    </h:body>
</html>
第二个bean:当我调用mybean2的print方法时,注入的myBean的“name”属性返回null

import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named
        @Named(value = "myBean2")
        @SessionScoped
        public class MyBean2 implements Serializable{
            String name;
            @Inject
            MyBean myBean;

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }


            public String print(){
                this.name = this.myBean.name;
                return null;
            }
            /**
             * Creates a new instance of myBean2
             */
            public MyBean2() {


    }
    }

这是正常的还是代码或配置有问题?

您也可以发布导入语句吗?另外,我假设这个UI是一个JSF2 facelet,对吗?是的,您是正确的,我添加了imports您如何确认
myBean.name==null
?您还意识到您正在缩小
print()
中类级别
name
变量的范围?我正在通过调试来确认这一点。我也做了一些修改。拜托see@odgiivH您的修改是基于您拥有的实际工作代码,还是只是为了回应我的评论?