将Managed Bean设置为Composite Component中的参数

时间:2011-11-17 00:16:49

标签: jsf jsf-2 facelets composite-component managed-bean

有没有办法在复合组件中设置托管bean参数,然后让使用类来决定使用哪个实际托管bean?

类似于comp.xhtml

的内容
       <cc:interface>
            <cc:attribute name="price" />
            <cc:param name="pageBean" value="#{superBean}" />       
       <cc:interface>
       <cc:implementation>
                <h:outputText value="#{cc.attrs.price}"/>
       </cc:implementation>

然后,在使用页面

   <ezcomp:comp pageBean="actualBean"
                          price="#{actualBean.price}" >

    </ezcomp:comp> 

在我的例子中,ActualBean是SuperBean的子类型。

我甚至不确定这是可能的,但我们只是说如果有人证明我错了会很棒。

提前谢谢

1 个答案:

答案 0 :(得分:11)

  

基本上要删除重复的代码。我有很多需要在复合组件中设置的属性。使用页面唯一不同的是托管bean的名称,都是超大豆的子类型。

您无需指定所有属性。只是单独指定bean就足够了。您可以直接在复合组件中引用其属性。

<cc:interface>
    <cc:attribute name="pageBean" type="com.example.SuperBean" required="true" />       
<cc:interface>
<cc:implementation>
    <h:outputText value="#{cc.attrs.pageBean.price}"/>
</cc:implementation>

<ezcomp:comp pageBean="#{actualBean}" />