2011-12-14 16 views
4

私はすでにセッションスコープのCDI Beanを1つ持っており、現在ログインしているユーザーデータを保持しています。 ここから、別のスコープのリクエストから、このBeanにアクセスしてデータを取得したいと思います。私は、ユーザーのログインに依存するいくつかの操作があります。それが私が必要とする唯一の情報です。リクエストスコープのCDI BeanからセッションスコープのCDI Beanへのアクセスを取得

アクセス方法

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; 

は注意(それがunconstructedインスタンスで何かを注入することはできません、あなたが参照してください)。最も初期のアクセスポイントは@PostConstructメソッドです。

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

私はすでにこれを試しましたが、成功しませんでした。注入されたAccountBeanを調べると、すべてのフィールドでnullが確認されました。私は、h:commandButtonによって呼び出されるメソッドの内部をチェックしていました。これはその理由でしょうか?まだ構築されていないのですか? – rivasket

+0

別のインスタンスまたは管理されていないインスタンスにログインデータを設定したようです。コードを見ずにログインデータをどのように設定したかを伝えるのは難しいです。 – BalusC

+0

私の質問が更新されました。私はSearchBeanの中にログインしたユーザーログインを取得したいと思います。 – rivasket

関連する問題