1

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

这是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>

豆子:

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

        String name;

        public String getName() {
            return name;
        }

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

        /**
         * Creates a new instance of myBean
         */
        public MyBean() {
        }
    }

第二个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() {


    }
    }

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

4

0 回答 0