Декорирование стандартных компонентов в составных компонентах, как наследовать атрибуты? - PullRequest
1 голос
/ 15 сентября 2011

Мне интересно, есть ли хороший способ украсить компоненты составными компонентами?

Пример:

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

В этом случае атрибут значения передается содержащемуся <h:inputText>. Но как насчет всех других атрибутов? Нужно ли объявлять их всех в разделе <composite:interface>?

Было бы неплохо иметь какое-то наследование от стандартных компонентов, например, атрибут maxlength <h:inputText> автоматически доступен в составном компоненте.

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Нужно ли объявлять их всех в разделе <composite:interface>?

Не обязательно, вы можете просто использовать maxlength="#{cc.attrs.maxlength}" без необходимости объявлять его как <composite:attribute>. Однако это плохо для документальных целей. Разработчик не видит, чтобы этот атрибут появлялся в документации составного компонента (например, для автодополнения IDE).


Было бы неплохо иметь какое-то наследование от стандартных компонентов, например, так. атрибут maxlength <h:inputText> автоматически доступен в составном компоненте.

Это невозможно. Для этого вам действительно нужно создать полноценный пользовательский компонент UIInput и / или Renderer (в вашем конкретном случае достаточно рендерера).

0 голосов
/ 16 января 2012

Я привел пример того, как декорировать составной компонент, здесь https://stackoverflow.com/a/8881510/1151983

Однако это не обеспечивает реального наследования, но позволяет разделять общие вещи между набором похожих составных компонентов.

...