- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【JSF】バッキングビーンから別のバッキングビーンを参照するには?)
【JSF】バッキングビーンから別のバッキングビーンを参照する方法
このQ&Aのポイント
- バッキングビーンからセッションスコープの別のバッキングビーンのプロパティを取得する方法について教えてください。
- JSFを使用すると、バッキングビーン以外のビーンクラスをセッションに格納・取得することは可能でしょうか?
- バッキングビーンのdoHoge()メソッドの引数がVOIDなので、HttpSessionをどう利用すれば良いのかわかりません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#49664
回答No.1
要するに、あるメソッドから他のBeanにアクセスできればいいわけですね。 まず、Beanクラスを定義し、これをfaces-config.xmlなどに<managed-bean>タグで登録しておきます。このへんは普通のBacking Beanと同じですからそれの登録を参照してください。これで、Backing Bean以外にもいくらでもBeanは登録できます。 で、外部からBeanを利用する方法ですが、例えば"bean1"という名前のMyBeanクラスのBeanインスタンスを得るならこんな具合になります。 FacesContext fc = FacesContext.getCurrentInstance(); Application app = fc.getApplication(); ValiableResolver vr = app.getVariableResolver(); MyBean bean = (MyBean)cr.resolveVariable(fc,"bean1"); FacesContextからApplicationを取得し、そこから更にValiableResolverを取得します。これが各種の情報を取得するためのクラスで、resolveVariableを使えば指定した名前の変数を取り出せます。 なお、これらのクラスの詳細はJavaDocを参照してください。
お礼
FacesContext context = FacesContext.getCurrentInstance(); ExternalContext exContext = context.getExternalContext(); HttpServletRequest req = (HttpServletRequest) exContext.getRequest(); HttpSession session = req.getSession(); MyBean myBean = (MyBean) session.getAttribute("myBean"); というExternalContextを使った方法でもいけることが判ったのでHttpSessionを自由に利用できることもわかったのですが、faces-config.xmlに登録しているmanaged-beanであれば、ご回答いただいたValiableResolverを使用する方法も有効ですね。 勉強になりましたm(__)m