2013-02-22 89 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>