Изучаем 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.
Преобразователь | Описание |
---|---|
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, и зарегистрировать его с помощью метаданных. Этот интерфейс имеет два метода:
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.