2011-12-14 86 views
4

我已经一个会话范围CDI豆,这使当前登录的用户数据。 现在,从另一个请求范围我想访问这个bean来获取一些数据。我有一些操作要做,这取决于用户登录。这是我需要的唯一信息。可以访问会话范围CDI豆从请求范围CDI豆

如何访问呢?

AccountBean.java:部分

@Named("accountBean") 
@SessionScoped 
public class AccountBean implements Serializable { 
    private static final long serialVersionUID = 16472027766900196L; 

    @Inject 
    AccountService accountService; 

    private String login; 
    private String password; 
    // getters and setters ommited 
} 

login.xhtml:

<h:form> 
    <h:panelGrid columns="2"> 
     #{msgs.loginPrompt} 
     <h:inputText id="login" value="#{accountBean.login}" /> 
     #{msgs.passwordPrompt} 
     <h:inputSecret id="password" value="#{accountBean.password}" /> 
     <h:commandButton value="#{msgs.loginButtonText}" 
      action="#{accountBean.login}" /> 
    </h:panelGrid> 
</h:form> 

SearchBean.java:

@Named("searchBean") 
@RequestScoped 
public class SearchBean { 
     @Inject AccountBean accountBean; 
      // some other stuff 
} 
+0

嗨@rivasket!你解决这个案子了吗?我现在正遇到这种麻烦!如果你能告诉我那会很好。 – Socrates

回答

6

菊st @Inject它。

@Inject 
private Bean bean; 

请注意,这不是可用在接受bean的构造函数(它不可能在未构造的情况下注入的东西,你看)。最早的接入点是一个@PostConstruct方法。

@PostConstruct 
public void init() { 
    bean.doSomething(); 
} 
+0

我已经试过这个,但没有成功。当我查看注入的AccountBean时,我看到每个字段都有空值。我正在检查它里面的方法,这是由h:commandButton调用。它能成为这个的原因吗?它还没有建成吗? – rivasket

+0

显然你已经在不同的或非托管的实例上设置了登录数据。很难说没有看到代码如何设置登录数据。 – BalusC

+0

我更新了我的问题。我想在SearchBean内部登录用户登录。 – rivasket