嗨,我已经用 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() {
}
}
这是正常的还是代码或配置有问题?