이것은 @Inject is injecting a new instance every time i use it과 비슷하지만, 해당 스레드에서 대답을 찾을 수 없습니다.@Inject는 세션에서 새 빈 인스턴스를 만듭니다.
저는 CDI와 JSF에 새로운 것이므로 JSF 주석 대신 CDI를 사용하려고합니다. MemberController에서 자격 증명을 검색하고 싶습니다. 빈 자체 (둘 다)는 jsf 페이지에서 호출됩니다. 문제는 MemberController의 Credential 인스턴스가 항상 null name/password를 갖기 때문에 Credential의 setter가 적중되었음을 확인했습니다. Credential의 두 인스턴스가 왜 있는지 이해할 수 없습니다. @ ManagedBean + @ ManagedProperty를 통해 원하는 것을 얻을 수 있습니다. 그러나 나는 CDI로 어떻게 같은 일을 할 수 있는지 알고 싶다.
내 환경
제이 보스 7.1.1 + 자바 EE 6Credential.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}" />
안녕하세요 앤디, 귀하의 의견에 감사드립니다, 거기에 몇 시간을 보냈습니다 마침내 나는 디버그 창에 null 값을 표시하지만, 실제로는 주입 프록시에 대한 이클립스에 속아 찾아. 값은 오랜 시간 동안 거기에 있습니다 :) – Hongda
좋은 당신이 당신의 문제를 해결있어 :) –