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

gla*_*ill 5 jsf facelets composite-component jsf-2 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>
Run Code Online (Sandbox Code Playgroud)

然后,在使用页面中

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

    </ezcomp:comp> 
Run Code Online (Sandbox Code Playgroud)

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

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

先感谢您

Bal*_*usC 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>
Run Code Online (Sandbox Code Playgroud)

<ezcomp:comp pageBean="#{actualBean}" />
Run Code Online (Sandbox Code Playgroud)