装饰复合组件中的标准组件,如何继承属性?

时间:2011-09-15 16:17:45

标签: jsf jsf-2 facelets composite-component

我想知道是否有一种很好的方法来用复合组件装饰组件?

示例:

<composite:implementation>
    <div style="someFancyClass">
        <h:inputText value="#{cc.attrs.value}" />
    </div>
</composite:implementation>

在这种情况下,value属性将传递给包含的<h:inputText>。但是所有其他属性呢?我是否必须在<composite:interface>部分声明所有这些内容?

从标准组件中获得某种继承会很好,例如, <h:inputText>的maxlength属性在复合组件中自动可用。

2 个答案:

答案 0 :(得分:1)

  

我是否必须在<composite:interface>部分声明所有内容?

没有必要,您可以使用maxlength="#{cc.attrs.maxlength}"而无需将其声明为<composite:attribute>。但是,这对于记录目的来说是不好的。开发人员不会在复合组件的文档中看到此属性(例如,可能由IDE自动完成使用)。


  

从标准组件中获得某种继承会很好,例如, <h:inputText>的maxlength属性在复合组件中自动可用。

那是不可能的。为此,您确实需要创建一个完整的自定义UIInput组件和/或Renderer(在您的特定情况下,只需渲染器就足够了)。

答案 1 :(得分:0)

我提供了一个如何在这里装饰复合组件的示例https://stackoverflow.com/a/8881510/1151983

但是,这并不提供真正的继承,而是一种在一组类似的复合组件之间共享公共内容的方法。