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 只实例化了单个 mBean。

我想要 3 个 priceMBean 实例,我该如何实现?

拉斐尔。

4

1 回答 1

1

对于这个典型的用例,最好使用注入而不是在面部配置中创建 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”。使用依赖,您将拥有 3 个不同的子类实例,这些实例依赖于主 bean(父)的生命周期。

您可以使用以下模板:

<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 回答