- PR -

【JSF】faces-config.xml のManagedBean初期値を使ってnewしたい

1
投稿者投稿内容
小梅
会議室デビュー日: 2005/04/04
投稿数: 10
投稿日時: 2007-07-29 01:57
どなたかご教授ください。

faces-config.xml 内の
ManagedBean定義
<managed-bean-name>tempBean</managed-bean-name>
<managed-bean-class>jp.co.atmarkit.TempBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>bindProperty</property-name>
<value>1</value>
</managed-property>
のとおり、
別の画面制御用ManagedBean内にて、newしたいのですが、
どのようにすればよろしいでしょうか?

教えてください。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-07-30 11:30
引用:

小梅さんの書き込み (2007-07-29 01:57) より:
別の画面制御用ManagedBean内にて、newしたいのですが、
どのようにすればよろしいでしょうか?


JSFのバージョンが書いていないので1.1と仮定しています。

VariableResolver#resolveVariable()で参照した時に
指定された名前のオブジェクトが存在しない場合に
<managed-bean>の定義に従って構築されます。

コード:
FacesContext fc = FacesContext.getCurrentInstance();
fc.getApplication().getVariableResolver().resolveVariable(fc, "tempBean")


コード:
FacesContext fc = FacesContext.getCurrentInstance();
fc.getApplication().createValueBinding("#{tempBean}").getValue(fc)


このどちらかで(必要に応じてnewされたものを)取得できます。

参照時に必ずnewさせる方法はありませんが、
これらの方法で参照する前に該当オブジェクトを削除しておけば
必ず新たに構築されるので、毎回newするのと同じ意味に出来ます。

この場合の削除はValueBindingでsetValue(fc, null)が便利でしょう。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2007-07-31 17:30
プログラムでnewする方法はあしゅさんの解説の通りです。
ご参考までに、faces-config.xmlだけを使う方法をご紹介しておきます。

「別の画面制御用ManagedBean」というのを仮にcontrolBeanとします。
controlBeanからtempBeanにtempという名前のリンクを作っておくことがポイントです。
以下の記述をしておくと、controlBeanとtempBeanが同時に生成されて、リンクが張られます。
コード:
    <managed-bean>
        <managed-bean-name>controlBean</managed-bean-name>
        <managed-bean-class>ControlBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>temp</property-name>
            <value>#{tempBean}</value>
        </managed-property>
    </managed-bean>

小梅
会議室デビュー日: 2005/04/04
投稿数: 10
投稿日時: 2007-08-02 12:51
あしゅさん、よしだひろゆきさん

ご教授いただいた内容を参考に検討させていただきます。

ありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)