1

次のページがあり、price.xhtml が 3 回含まれています。

<f:subview id="include">
     <ui:include src="/secure/menu/price.xhtml">
        <ui:param name="info" value="#{msg['menu.step3.header']}" />
        <ui:param name="domainKey" value="KEY1" />
     </ui:include>
 </f:subview>
     <f:subview id="include2">
     <ui:include src="/secure/menu/price.xhtml">
        <ui:param name="info" value="#{msg['menu.step3.header']}" />
        <ui:param name="domainKey" value="KEY3" />
     </ui:include>
 </f:subview>
     <f:subview id="include2">
     <ui:include src="/secure/menu/price.xhtml">
        <ui:param name="info" value="#{msg['menu.step3.header']}" />
        <ui:param name="domainKey" value="KEY2" />
     </ui:include>
 </f:subview>

私の price.xhtml は ViewScope Mbean (priceMBean) を利用しています。問題は、JSF が 1 つの mBean のみをインスタンス化することです。

priceMBean の 3 つのインスタンスが必要です。これを実現するにはどうすればよいですか?

ラファエル。

4

1 に答える 1

1

この典型的なユースケースでは、Face config で N Bean リクエストスコープを作成する代わりに、インジェクションを使用することをお勧めします

BalusC の回答は優れており、DI と facelets で改善できます。

@ManagedBean
@ViewScoped
public class Parent {
    @Inject
    private Child price1;
    @Inject
    private Child price2;
    @Inject
    private Child price3;
    // ...
}

Child クラスが常に Parent の依存クラスである場合、Child は依存する "@Dependent" アノテーションを付けることができます。従属では、メイン Bean (親) のライフサイクルに依存する子クラスの 3 つの異なるインスタンスがあります。

また、次のテンプレートを使用できます。

<f:subview id="include">
    <ui:include src="/secure/menu/price.xhtml">
        <ui:param name="info" value="#{msg['menu.step3.header']}"/>
        <ui:param name="domainKey" value="KEY1"/>
        <ui:param name="price" value="#{priceMBean.price1}"/>
    </ui:include>
</f:subview>
<f:subview id="include2">
    <ui:include src="/secure/menu/price.xhtml">
        <ui:param name="info" value="#{msg['menu.step3.header']}"/>
        <ui:param name="domainKey" value="KEY3"/>
        <ui:param name="price" value="#{priceMBean.price2}"/>
    </ui:include>
</f:subview>
<f:subview id="include2">
    <ui:include src="/secure/menu/price.xhtml">
        <ui:param name="info" value="#{msg['menu.step3.header']}"/>
        <ui:param name="domainKey" value="KEY2"/>
        <ui:param name="price" value="#{priceMBean.price3}"/>
    </ui:include>
</f:subview>
于 2013-02-23T08:10:45.617 に答える