{0} должен быть числом, состоящим из одной или нескольких цифр
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
JavaServer Faces предоставляет набор реализаций Converter
, которые можно использовать для конвертации данных компонента. Цель конвертации — взять строковые данные, поступающие из Servlet API, и преобразовать их в строго типизированные объекты Java, которые можно использовать в компонентах бизнес-логики. Для получения дополнительной информации о концептуальных деталях модели этих преобразований см. Модель конвертации.
Стандартные реализации Converter
находятся в пакете javax.faces.convert
. Обычно конвертеры присваиваются неявно в зависимости от типа выражения EL, на которое указывает значение компонента. Однако к этим конвертерам также можно получить доступ по идентификатору конвертера. Таблица 11-1 показывает классы конвертеров и связанные с ними идентификаторы конвертеров.
Таблица 11-1 Классы конвертеров и их идентификаторы
Класс в пакете javax.faces.convert |
Идентификатор конвертера |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Стандартное сообщение об ошибке связано с каждым из этих конвертеров. Если вы зарегистрировали какой-либо из этих конвертеров в компоненте на своей странице, и конвертер не может конвертировать значение компонента, на странице появится сообщение об ошибке конвертера. Например, следующее сообщение об ошибке появляется, если BigIntegerConverter
не может преобразовать значение:
{0} должен быть числом, состоящим из одной или нескольких цифр
В этом случае параметр замещения {0}
будет заменён именем компонента ввода, на котором зарегистрирован конвертер.
Два стандартных конвертера DateTimeConverter
и NumberConverter
имеют собственные теги, которые позволяют настраивать формат данных компонента с помощью атрибутов тега. Для получения дополнительной информации об использовании DateTimeConverter
см. Использование DateTimeConverter. Для получения дополнительной информации об использовании NumberConverter
см. Использование NumberConverter. В следующем разделе объясняется, как преобразовать значение компонента, в том числе как зарегистрировать другие стандартные конвертеры в компоненте.
Чтобы использовать конкретный конвертер для преобразования значения компонента, необходимо зарегистрировать конвертер в компоненте. Вы можете зарегистрировать любой из стандартных конвертеров одним из следующих способов.
Вложите один из стандартных тегов конвертера в тег компонента. Так можно поступить с f:convertDateTime
и f:convertNumber
, которые описаны в Использование DateTimeConverter и Использование NumberConverter соответственно.
Свяжите значение компонента со свойством Managed-бина того же типа, что и конвертер. Эта техника наиболее распространена.
Обратитесь к конвертеру из атрибута converter
тега компонента, указав идентификатор класса конвертера.
Вложите тег f:converter
внутрь тега компонента и используйте либо атрибут converterId
тега f:converter
, либо его атрибут binding
для ссылки на конвертер.
В качестве примера второго метода, когда вы хотите преобразовать данные компонента в Integer
, вы можете просто привязать значение компонента к свойству Managed-бина. Вот пример:
Integer age = 0;
public Integer getAge(){ return age;}
public void setAge(Integer age) {this.age = age;}
Данные из тега h:inputText
в этом примере будут преобразованы в значение java.lang.Integer
. Тип Integer
поддерживается типом конвертера NumberConverter
. Если не требуется указывать какие-либо инструкции форматирования с помощью атрибутов тега f:convertNumber
, и если одного из стандартных конвертеров будет достаточно, можно просто ссылаться на этот конвертер с помощью атрибута converter
.
Вы также можете вложить тег f:converter
в тег компонента и использовать атрибут converterId
тега конвертера или его атрибут binding
для ссылки на конвертер.
Атрибут converterId
должен ссылаться на идентификатор конвертера. Вот пример, который использует один из идентификаторов конвертера, перечисленных в таблице 11-1:
<h:inputText value="#{loginBean.age}">
<f:converter converterId="javax.faces.Integer" />
</h:inputText>
Вместо использования атрибута converterId
тег f:converter
может использовать атрибут binding
. Атрибут binding
должен разрешать свойство бина, которое принимает и возвращает соответствующий объект Converter
.
Вы также можете создавать собственные конвертеры и регистрировать их в компонентах, используя тег f:converter
. Подробнее см. Создание и использование кастомного конвертера.
Вы можете преобразовать данные компонента в java.util.Date
, вложив тег convertDateTime
в тег компонента. Тег convertDateTime
имеет несколько атрибутов, которые позволяют вам указать формат и тип данных. Таблица 11-2 перечисляет атрибуты.
Вот простой пример тега convertDateTime
:
<h:outputText value="#{cashierBean.shipDate}">
<f:convertDateTime type="date" dateStyle="full" />
</h:outputText>
При связывании DateTimeConverter
с компонентом убедитесь, что свойство Managed-бина, с которым связан компонент, имеет тип java.util.Date
. В предыдущем примере cashierBean.shipDate
должен иметь тип java.util.Date
.
Тег примера может отображать следующий вывод:
Saturday, September 21, 2013
Вы также можете отобразить ту же дату и время, используя следующий тег, в котором указан формат даты:
<h:outputText value="#{cashierBean.shipDate}">
<f:convertDateTime pattern="EEEEEEEE, MMM dd, yyyy" />
</h:outputText>
Если вы хотите отобразить пример даты на испанском языке, вы можете использовать атрибут locale
:
<h:outputText value="#{cashierBean.shipDate}">
<f:convertDateTime dateStyle="full"
locale="es"
timeStyle="long" type="both" />
</h:outputText>
Этот тег будет отображать следующий вывод:
jueves 24 de octubre de 2013 15:07:04 GMT
Обратитесь к уроку «Customizing Formats» учебного руководства по Java http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html
с информацией о том, как форматировать вывод, используя атрибут pattern
тега convertDateTime
.
Таблица 11-2 Атрибуты для тега f:convertDateTime
Атрибут |
Тип |
Описание |
|
|
Используется для привязки конвертера к свойству Managed-бина. |
|
|
Определяет формат, указанный в |
|
|
Используется с составными компонентами. Относится к одному из объектов в составном компоненте, внутрь которого этот тег вложен. |
|
|
|
|
|
Пользовательский шаблон форматирования, который определяет, как строка даты/времени должна быть отформатирована и проанализирована. Если этот атрибут указан, атрибуты Смотрите таблицу 11-3 для значений по умолчанию, когда |
|
|
Определяет формат, указанный в |
|
|
Часовой пояс, в котором можно интерпретировать любую информацию о времени в строке |
|
|
Указывает, будет ли строковое значение содержать дату, время или оба. Допустимые значения: Смотрите таблицу 11-3 для дополнительной информации. |
Таблица 11-3 Тип атрибута и значения шаблона по умолчанию
Тип атрибута |
Класс |
По умолчанию, когда шаблон не указан |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вы можете преобразовать данные компонента в java.lang.Number
, вложив тег convertNumber
в тег компонента. Тег convertNumber
имеет несколько атрибутов, которые позволяют вам указать формат и тип данных. Таблица 11-4 перечисляет атрибуты.
В следующем примере тег convertNumber
используется для отображения общей цены содержимого корзины покупок:
<h:outputText value="#{cart.total}">
<f:convertNumber currencySymbol="$" type="currency"/>
</h:outputText>
При связывании NumberConverter
с компонентом убедитесь, что свойство Managed-бина, с которым связан компонент, имеет примитивный тип или имеет тип java.lang.Number
. В предыдущем примере cart.total
имеет тип double
.
Вот пример числа, которое может отображать этот тег:
$934
Этот результат также можно отобразить с помощью следующего тега, в котором указан шаблон валюты:
<h:outputText id="cartTotal" value="#{cart.total}">
<f:convertNumber pattern="$####" />
</h:outputText>
См. «Customizing Formats» учебного руководства по Java http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html
для получения дополнительной информации о форматировании вывода, используя атрибут pattern
тега convertNumber
.
Таблица 11-4 Атрибуты для тега f:convertNumber
Атрибут |
Тип |
Описание |
|
|
Используется для привязки конвертера к свойству Managed-бина. |
|
|
Код валюты ISO 4217, используется только при форматировании валют. |
|
|
Символ валюты, применяется только при форматировании валют. |
|
|
Используется с составными компонентами. Относится к одному из объектов в составном компоненте, внутрь которого этот тег вложен. |
|
|
Указывает, содержит ли отформатированный вывод разделители группировки. |
|
|
Указывает, будет ли анализироваться только целая часть значения. |
|
|
|
|
|
Максимальное количество цифр, отформатированных в дробной части вывода. |
|
|
Максимальное количество цифр, отформатированных в целочисленной части вывода. |
|
|
Минимальное количество цифр, отформатированных в дробной части вывода. |
|
|
Минимальное количество цифр, отформатированных в целочисленной части вывода. |
|
|
Пользовательский шаблон форматирования, определяющий способ форматирования и синтаксического анализа числовой строки. |
|
|
Указывает, анализируется ли строковое значение и форматируется ли он как |
Назад | Вперёд | Содержание |