在组合组件中装饰标准组件,如何继承属性



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

的例子:

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

在本例中,value属性传递给包含的<h:inputText>。但是其他属性呢?我必须在<composite:interface>部分声明它们吗?

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

我必须在<composite:interface>部分声明所有这些吗?

不需要,您可以直接使用maxlength="#{cc.attrs.maxlength}"而不需要将其声明为<composite:attribute>。然而,这对于文档目的来说是不好的。开发人员不会看到这个属性出现在复合组件的文档中(例如,它可能被IDE自动完成所使用)。


如果能从标准组件中继承一些属性就好了,例如,<h:inputText>的maxlength属性在复合组件中自动可用。

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

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

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

相关内容

  • 没有找到相关文章

最新更新