Есть ли такая вещь, как наследование в составных компонентах JSF 2? - PullRequest
7 голосов
/ 14 июня 2011

Есть ли такая вещь, как наследование в составных компонентах JSF 2?

Насколько я знаю, нет. Я просто проверяю.

Спасибо!

1 Ответ

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

Наследование составных компонентов невозможно. Чтобы избежать дублирования кода, мы украсили реализацию составного компонента JSF2.

Материал, общий для всех полей ввода нашего приложения, представлен в шаблоне декоратора следующим образом:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:cc="http://java.sun.com/jsf/composite"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:cu="http://mytags.de/jsftags">

    <!-- provides a common set of layout information for inputfields -->
    <ui:param name ="fieldStyle" value="#{propertiesController.get('FIELD_STYLE', cc.attrs.name)}" />

    <h:panelGroup id="basicInputField" styleClass="basicInputField" layout="block" style="width: #{cc.attrs.width}; height: #{cc.attrs.height};">
        <ui:insert name="component">
            no component given...
        </ui:insert>
    </h:panelGroup>

</ui:composition>

И составной компонент использует шаблон, чтобы украсить себя:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:cc="http://java.sun.com/jsf/composite"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:cu="http://mytags.de/jsftags">

    <cc:interface>
        <cc:attribute name="name" required="true" />
        <cc:attribute name="width" required="false" default="auto" />
        <cc:attribute name="height" required="false" default="auto" />
        <cc:attribute name="inset" required="false" default="0px" />
    </cc:interface>

    <cc:implementation>
        <ui:decorate template="basicInputField.xhtml">
            <ui:define name="component">
                <h:inputText id="inputText" style="#{fieldStyle} width: 100%;" value="#{levelContent.test}" />
            </ui:define>
        </ui:decorate>
    </cc:implementation>
</html>

Таким образом, нам нужно только изменить шаблон декоратора, когда меняется способ извлечения свойств поля (то есть только для чтения, требуется, стиль, ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...