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

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

Определение того, нужен ли вам кастомный компонент или отрисовщик

JavaServer Faces поддерживает очень простой набор компонентов и связанных отрисовщиков. Этот раздел поможет вам решить, можете ли вы использовать стандартные компоненты и отрисовщики в своём приложении или вам нужен кастомный компонент или кастомный отрисовщик.

Здесь рассматриваются следующие темы:

Когда использовать кастомный компонент

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

Необходимо создавать кастомный компонент в следующих ситуациях.

  • Необходимо добавить новое поведение в стандартный компонент, создать событие дополнительного типа (например, уведомить другую часть страницы о том, что что-то изменилось в этом компоненте в результате взаимодействия с пользователем).

  • При обработке запроса значения компонента необходимо выполнить действие, отличное от того, что доступно в любом из существующих стандартных компонентов.

  • Вы хотите воспользоваться возможностями HTML, предлагаемыми браузером, но ни один из стандартных компонентов JavaServer Faces не использует эту возможность так, как вы этого хотите. Текущая версия не содержит стандартных компонентов для сложных компонентов HTML, таких как фреймы. Однако из-за расширяемости архитектуры компонентов вы можете использовать JavaServer Faces для создания таких компонентов. В примере Duke's Bookstore создаются кастомные компоненты, соответствующие тегам HTML map и area.

  • Вы должны выполнить отрисовку в не-HTML клиент, который требует дополнительных компонентов, не поддерживаемых HTML. В конце концов, стандартный инструментарий отрисовки HTML обеспечит поддержку всех стандартных компонентов HTML. Однако, если вы выполняете отрисовку для другого клиента, например для телефона, вам может потребоваться создать кастомные компоненты для представления элементов управления, поддерживаемых клиентом. Например, некоторые архитектуры компонентов для беспроводных клиентов включают поддержку тикеров и индикаторов выполнения, которые недоступны в клиенте HTML. В этом случае вам может также потребоваться кастомный отрисовщик вместе с компонентом, или только кастомный отрисовщик.

Вам не нужно создавать кастомный компонент в следующих случаях.

  • Вам нужно объединить компоненты, чтобы создать новый компонент со своим уникальным поведением. В этой ситуации вы можете использовать составной компонент для объединения существующих стандартных компонентов. Для получения дополнительной информации о составных компонентах см. Составные компоненты и главу 14 «Составные компоненты: дополнительные темы и пример».

  • Вам просто нужно манипулировать данными на компоненте или добавлять к нему функциональные возможности приложения. В этой ситуации вам следует создать Managed-бин для этой цели и связать его со стандартным компонентом, а не создавать кастомный компонент. См. Managed-бины в JavaServer Faces для получения дополнительной информации о Managed-бинах.

  • Необходимо конвертировать данные компонента в тип, не поддерживаемый его отрисовщиком. См. Использование стандартных конвертеров для получения дополнительной информации о конвертации данных компонента.

  • Необходимо выполнить валидацию данных компонента. Стандартные и кастомные валидаторы могут быть добавлены к компоненту с помощью тегов validator на странице. Смотрите Использование стандартных валидаторов и Создание и использование кастомного валидатора для получения дополнительной информации о валидации данных компонента.

  • Необходимо зарегистрировать слушатели событий в компонентах. Вы можете либо зарегистрировать слушатели событий в компонентах, используя теги f:valueChangeListener и f:actionListener, либо указать на метод обработки событий в Managed-бине, используя атрибуты actionListener или valueChangeListener. Смотрите Реализация слушателя событий и Пишем методы Managed-бинов для получения дополнительной информации.

Когда использовать кастомный отрисовщик

Отрисовщик, который генерирует разметку для отображения компонента на веб-странице, позволяет отделить семантику компонента от его внешнего вида. Сохраняя это разделение, вы можете поддерживать различные виды клиентских устройств используя одну и ту же логику обработки. Вы можете думать об отрисовщике как о «клиентском адаптере». Он производит вывод, подходящий для употребления и отображения клиентом, и принимает ввод от клиента, когда пользователь взаимодействует с этим компонентом.

Если создаётся кастомный компонент, необходимо, среди прочего, убедиться, что класс компонента выполняет следующие операции, которые являются центральными для отрисовки компонента:

  • Декодирование: конвертация параметров входящего запроса в локальное значение компонента

  • Кодирование: конвертация текущего локального значения компонента в соответствующую разметку, которая представляет его в ответе.

Спецификация JavaServer Faces поддерживает две программные модели для выполнения кодирования и декодирования.

  • Прямая реализация: класс компонента сам реализует декодирование и кодирование.

  • Делегированная реализация: класс компонента делегирует реализацию кодирования и декодирования отдельному отрисовщику.

Передав операции отрисовщику, вы можете связать кастомный компонент с различными отрисовщиками, чтобы можно было отрисовать компонент на разных клиентах. Если вы не планируете отрисовывать определённый компонент на разных клиентах, может быть проще позволить классу компонента обрабатывать отрисовку. Тем не менее, отдельный отрисовщик позволяет сохранить разделение семантики от внешнего вида. Приложение Duke's Bookstore отделяет отрисовщики от компонентов, хотя оно обслуживает только веб-браузеры с поддержкой HTML 4.

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

Комбинирование компонента, отрисовщика и тега

Когда вы создаёте кастомный компонент, вы можете создать и парный ему кастомный отрисовщик. Чтобы связать компонент с отрисовщиком и сослаться на компонент со страницы, вам также потребуется кастомный тег.

Хотя если нужно написать кастомный компонент и отрисовщик, писать код для кастомного тега (обработчик тега) нет необходимости. Если вы укажете комбинацию компонента и отрисовщика, Facelets автоматически создаст обработчик тега.

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

Стоит использовать кастомный отрисовщик без кастомного компонента, если вы хотите добавить некоторую валидацию на стороне клиента для стандартного компонента. Код валидации реализуются на JavaScript на клиентской стороне, а затем он отображается с помощью кастомного отрисовщика. В этой ситуации требуется кастомный тег для отрисовщика, чтобы обработчик тега мог зарегистрировать отрисовщик в стандартном компоненте.

Кастомные компоненты, как и кастомные отрисовщики нуждаются в кастомных тегах, связанных с ними. Тем не менее, вы можете иметь кастомный тег без кастомного отрисовщика или кастомного компонента. Для примера предположим, что вам нужно создать кастомный валидатор, который требует дополнительных атрибутов в теге валидатора. В этом случае кастомный тег соответствует кастомному валидатору, а не кастомному компоненту или кастомному отрисовщику. В любом случае вам всё равно нужно связать кастомный тег с серверным объектом.

Таблица 15-1 суммирует, что вы должны или можете связать с кастомным компонентом, отрисовщиком или тегом.

Таблица 15-1. Требования к кастомным компонентам, отрисовщикам и тегам

Что кастомизируется

Должен иметь

Может иметь

Кастомный компонент

Кастомный тег

Кастомный или стандартный отрисовщик

Кастомный отрисовщик

Кастомный тег

Кастомный или стандартный компонент

Кастомный тег JavaServer Faces

Некоторые серверные объекты, такие как компонент, кастомный отрисовщик или кастомный валидатор

Кастомный или стандартный компонент, связанный с кастомным отрисовщиком


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