2013-02-22 70 views
1

我有以下页面,price.xhtml已包含3次。ViewScope仅实例化一次

<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的实例,我该如何实现?

拉斐尔。

+2

看一看这个答案http://stackoverflow.com/a/3710337/1809603 – 2013-02-22 23:44:04

回答

1

对于这种典型的使用情况下,最好使用注射,而不是创建N个豆在脸上的配置要求的范围

BalusC答案是好,可与DI和Facelets得到改善。

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

如果Child类始终是父类的依赖类,则Child可以注释为从属“@Dependent”。使用依赖关系,您将有3个独立的Child类实例依赖于主Bean(Parent)的生命周期。

你也可以使用下面的模板:

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