プロが教える店舗&オフィスのセキュリティ対策術

【質問1】
表題のとおり、あるバッキングビーンからセッションスコープの別のバッキングビーンのプロパティをgetterで取得したいのですが、可能でしょうか?可能な場合、どのようにコードを組めばいいのでしょうか?


【質問2】
JSFを使用すればconfigの設定によりバッキングビーンがセッションに格納されますが、バッキングビーン以外のビーンクラス(バッキングビーンとしては使用しないがgetter、setterでアクセスするクラス)をHttpSessionに格納・取得することは出来ますか?

<h:commandButton action="#{myBean.doHoge}" value="GOGO" />

というのも、以上のボタンを押下すればバッキングビーン”myBean”のdoHoge()メソッドが呼び出されます。doHoge()の引数でRequestオブジェクトがもらえればそこからHttpSessionを利用することも出来るでしょうが、doHoge()メソッドは引数VOIDなので、HttpSessionをどう利用していいのかがわかりません。


よろしくお願いいたします。

A 回答 (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を参照してください。

参考URL:http://java.sun.com/j2ee/javaserverfaces/1.1_01/ …
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/17 11:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!