我想知道是否有一种很好的方法来用复合组件装饰组件?
示例:
<composite:implementation>
<div style="someFancyClass">
<h:inputText value="#{cc.attrs.value}" />
</div>
</composite:implementation>
在这种情况下,value属性将传递给包含的<h:inputText>
。但是所有其他属性呢?我是否必须在<composite:interface>
部分声明所有这些内容?
从标准组件中获得某种继承会很好,例如, <h:inputText>
的maxlength属性在复合组件中自动可用。
答案 0 :(得分:1)
我是否必须在
<composite:interface>
部分声明所有内容?
没有必要,您可以使用maxlength="#{cc.attrs.maxlength}"
而无需将其声明为<composite:attribute>
。但是,这对于记录目的来说是不好的。开发人员不会在复合组件的文档中看到此属性(例如,可能由IDE自动完成使用)。
从标准组件中获得某种继承会很好,例如,
<h:inputText>
的maxlength属性在复合组件中自动可用。
那是不可能的。为此,您确实需要创建一个完整的自定义UIInput
组件和/或Renderer
(在您的特定情况下,只需渲染器就足够了)。
答案 1 :(得分:0)
我提供了一个如何在这里装饰复合组件的示例https://stackoverflow.com/a/8881510/1151983
但是,这并不提供真正的继承,而是一种在一组类似的复合组件之间共享公共内容的方法。