【发布时间】:2014-05-26 10:30:21
【问题描述】:
它类似于@Inject is injecting a new instance every time i use it,但我在那个帖子中找不到答案。
我对 CDI 和 JSF 都很陌生,我正在尝试使用 CDI 而不是 JSF 注释。 我想从 MemberController 中检索凭据。 bean 本身(两者)都是从 jsf 页面调用的。问题是 MemberController 中的 Credential 实例始终具有空名称/密码,即使我确认 Credential 中的设置器被命中。我不明白为什么有两个凭据实例。我可以通过@ManagedBean+@ManagedProperty 得到我想要的。但我想知道如何用 CDI 做同样的事情。
我的环境是 JBoss 7.1.1+Java EE 6
凭据.Java
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import java.io.Serializable;
@Named
@SessionScoped
public class Credential implements Serializable{
private static final long serialVersionUID = 680524601336349146L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
private String password;
}
MemberController.Java
@Named
@SessionScoped
public class MemberController implements Serializable {
private static final long serialVersionUID = 8993796595348082763L;
@Inject
private Credential newCredential;
public void login() {
String msg = newCredential.getName()+":"+newCredential.getPassword();
}
}
JSF 页面段
<p:inputText id="username" label="Username" value="#{credential.name}" />
<p:password id="password" label="Password" value="#{credential.password}" />
<p:commandButton value="Login" action="members" actionListener="#{memberController.login}" />
【问题讨论】: