2011-12-14 140 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