Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Регистрация кастомного отрисовщика с помощью инструментария отрисовки (Render Kit)

Когда разработчик приложения создаёт кастомный отрисовщик, как описано в Делегирование отрисовки отрисовщику, он должен зарегистрировать его с помощью соответствующего инструментария отрисовки. Поскольку приложение карты изображения реализует карту изображения HTML, классы AreaRenderer и MapRenderer в примере Duke's Bookstore должны быть зарегистрированы с использованием инструментария отрисовки HTML.

Вы регистрируете отрисовщик либо используя аннотацию @FacesRenderer, как описано в Создание класса отрисовщика, либо используя элемент render-kit файла конфигурации приложения. Вот гипотетическая конфигурация AreaRenderer:

<render-kit>
    <renderer>
        <component-family>Area</component-family>
        <renderer-type>DemoArea</renderer-type>
        <renderer-class>
            dukesbookstore.renderers.AreaRenderer
        </renderer-class>
        <attribute>
            <attribute-name>onmouseout</attribute-name>
            <attribute-class>java.lang.String</attribute-class>
        </attribute>
        <attribute>
            <attribute-name>onmouseover</attribute-name>
            <attribute-class>java.lang.String</attribute-class>
        </attribute>
        <attribute>
            <attribute-name>styleClass</attribute-name>
            <attribute-class>java.lang.String</attribute-class>
        </attribute>
    </renderer>
    ...

Атрибуты, указанные в теге renderer, переопределяют любые параметры в аннотации @FacesRenderer.

Элемент render-kit представляет реализацию javax.faces.render.RenderKit. Если render-kit-id не указан, предполагается, что используется инструментарий отрисовки HTML по умолчанию. Элемент renderer представляет реализацию javax.faces.render.Renderer. Вложив элемент renderer в элемент render-kit, вы регистрируете отрисовщик с помощью реализации RenderKit, связанной с render-kit.

renderer-class — это полное имя класса Renderer.

Элементы component-family и renderer-type используются компонентом для поиска отрисовщиков, которые могут его отрисовать. Идентификатор component-family должен совпадать с идентификатором, возвращаемым методом getFamily класса компонента. Семейство компонентов представляет компонент или набор компонентов, которые может отображать конкретный отрисовщик. renderer-type должен совпадать с тем, который возвращается методом getRendererType класса обработчика тега.

Используя семейство компонентов и тип отрисовщика для поиска отрисовщиков для компонентов, JavaServer Faces позволяет компоненту отображаться несколькими отрисовщиками и позволяет отрисовщику отображать несколько компонентов.

Каждый из тегов attribute определяет зависящий от отрисовки атрибут и его тип. Элемент attribute не влияет на работу приложения во время выполнения. Скорее, он предоставляет инструментам разработки информацию об атрибутах, которые поддерживает Renderer.

Объект, отвечающий за отрисовщик компонента (будь то сам компонент или отрисовщик, которому компонент делегирует отрисовку), может использовать фасеты для помощи в процессе отрисовки. Эти аспекты позволяют разработчику кастомного компонента управлять некоторыми аспектами отрисовки компонента. Рассмотрите этот пример тега кастомного компонента:

<d:dataScroller>
    <f:facet name="header">
        <h:panelGroup>
            <h:outputText value="Account Id"/>
            <h:outputText value="Customer Name"/>
            <h:outputText value="Total Sales"/>
        </h:panelGroup>
    </f:facet>
    <f:facet name="next">
        <h:panelGroup>
            <h:outputText value="Next"/>
            <h:graphicImage url="/images/arrow-right.gif" />
        </h:panelGroup>
    </f:facet>
    ...
</d:dataScroller>

Тег компонента dataScroller включает в себя компонент, который будет отображать заголовок, и компонент, который будет отображать кнопку «Далее». Если отрисовщик, связанный с этим компонентом, отображает фасеты, вы можете включить следующие элементы facet в элемент renderer:

<facet>
    <description>This facet renders as the header of the table. It should be
         a panelGroup with the same number of columns as the data.
    </description>
    <display-name>header</display-name>
    <facet-name>header</facet-name>
</facet>
<facet>
    <description>This facet renders as the content of the "next" button in
         the scroller. It should be a panelGroup that includes an outputText
         tag that has the text "Next" and a right arrow icon.
    </description>
    <display-name>Next</display-name>
    <facet-name>next</facet-name>
</facet>

Если компонент, который поддерживает фасеты, обеспечивает свой собственный отрисовщик, и вы хотите включить элементы facet в файл конфигурации приложения, вам нужно поместить их в конфигурацию компонента, а не в конфигурацию отрисовщика.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)