Изучаем Java EE 7 - [174]

Шрифт
Интервал

Преобразование происходит в тот момент, когда введенные конечным пользователем данные должны быть преобразованы из строки в объект и наоборот. Оно позволяет убедиться, что все данные имеют правильный тип — например, можно преобразовать строку в объект типа java.util.Date или Integer либо цену в долларах в цену в евро. Что касается проверки, она гарантирует, что данные имеют необходимое содержимое (дата представлена в формате dd/MM/yyyy, число с плавающей точкой находится в диапазоне между 3,14 и 3,15 и т. д.).

Преобразование и проверка происходят во время различных фаз жизненного цикла страницы (которые вы видели в предыдущей главе), как показано на рис. 11.6.


Рис. 11.6. Преобразование и проверка во время жизненного цикла страницы


Во время фазы «Применить значения запроса» на рис. 11.6 значение компонента пользовательского интерфейса преобразуется в целевой объект (например, из строки в дату) и затем проверяется на этапе «Проверка процесса». Логично предположить, что преобразование и проверка происходят до связывания данных компонента с компонентом-подложкой (которое выполняется во время фазы «Обновление значений модели»). Если обнаружена ошибка, это приведет к добавлениям сообщений об ошибке и сокращению жизненного цикла, поскольку он переходит сразу к фазе «Отрисовать ответ» (сообщения будут отображаться в пользовательском интерфейсе с помощью тега ). Во время этой фазы свойства компонента-подложки преобразуются обратно в строку, которая будет отображена.

JSF имеет набор стандартных преобразователей и валидаторов и позволяет разработчикам легко создавать свои собственные.

Преобразователи

Когда форма отображается в браузере, конечный пользователь заполняет поля ввода и нажимает кнопки, что приводит к транспортировке данных на сервер в запросе HTTP, который использует формат строки. Перед обновлением модели в компоненте-подложке эти данные должны быть преобразованы из строки в целевые объекты (Float, Integer, BigDecimal и т. д.). Обратное действие будет иметь место, когда данные должны будут отправиться обратно клиенту в ответе и отобразиться в браузере.

JSF поставляется с преобразователями для общих типов, таких как даты и числа. Если свойство компонента-подложки имеет примитивный тип (Integer, int, Float, float и т. д.), JSF автоматически преобразует значение компонента пользовательского интерфейса к правильному типу и обратно. Если это свойство имеет другой тип данных, вы должны предоставить свой преобразователь. В табл. 11.3 перечислены все стандартные преобразователи, которые находятся в пакете javax.faces.convert.


Таблица 11.3. Стандартные преобразователи
ПреобразовательОписание
BigDecimalConverterПреобразует строку к типу java.math.BigDecimal и наоборот
BigIntegerConverterПреобразует строку к типу java.math.BigInteger и наоборот
BooleanConverterПреобразует строку к типу Boolean (и примитиву boolean) и наоборот
ByteConverterПреобразует строку к типу Byte (и примитиву byte) и наоборот
CharacterConverterПреобразует строку к типу Character (и примитиву char) и наоборот
DateTimeConverterПреобразует строку к типу java.util.Date и наоборот
DoubleConverterПреобразует строку к типу Double (и примитиву double) и наоборот
EnumConverterПреобразует строку к типу Enum (и примитиву enum) и наоборот
FloatConverterПреобразует строку к типу Float (и примитиву float) и наоборот
IntegerConverterПреобразует строку к типу Integer (и примитиву int) и наоборот
LongConverterПреобразует строку к типу Long (и примитиву long) и наоборот
NumberConverterПреобразует строку к абстрактному классу java.lang.Number и наоборот
ShortConverterПреобразует строку к типу Short (и примитиву short) и наоборот

JSF будет автоматически преобразовывать вводимые значения к числам, когда свойство компонента-подложки будет иметь примитивный числовой тип, и к дате или времени, когда свойство будет иметь тип даты. Если автоматическое преобразование вам не подходит, вы можете явно управлять им с помощью стандартных тегов convertNumber и convertDateTime. Чтобы использовать эти теги, необходимо вложить преобразователь внутрь любого из тегов ввода или вывода. Преобразователь будет вызываться JSF в течение жизненного цикла.

Тег convertNumber имеет атрибуты, которые позволяют преобразовывать входное значение к числу (по умолчанию), валюте или процентам. Вы можете задать символ валюты или количество десятичных разрядов, а также шаблон форматирования, определяя, как число должно быть отформатировано и разобрано:

>

>··

>

Тег convertDateTime может конвертировать даты в различных форматах (дата, время или и то и другое). Он имеет несколько атрибутов, которые управляют преобразованием даты и часового пояса. Атрибут pattern позволяет идентифицировать шаблон строки даты, которая будет преобразована:

>

>··

>

Пользовательские преобразователи

Иногда преобразования чисел, дат, перечислений и т. д. недостаточно и вам может потребоваться собственное преобразование. Свой преобразователь легко разработать и использовать его на странице с помощью JSF. Вы просто должны написать класс, реализующий интерфейс javax.faces.convert.Converter, и зарегистрировать его с помощью метаданных. Этот интерфейс имеет два метода:


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.