Пользовательские переменные в сообщении об ошибке JSF Converter - PullRequest
12 голосов
/ 05 марта 2011

У меня есть страница формы с полем inputText, которое принимает дату. У нас есть конвертер, который преобразует строку из текстового поля в объект Date (то есть. "2011-03-01" в java.util.Date ("2011-03-01" "))

Если строка не является датой, например «123», то будет отображаться сообщение об ошибке проверки, например «значение (123) должно быть датой».

В настоящее время в моем файле .properties я вижу:

javax.faces.converter.DateTimeConverter.DATE = значение ({0}) должна быть датой

Мне нужно сделать это сообщение об ошибке более четким, указав, какое именно поле должно быть датой. (Так как в форме может быть несколько текстовых полей даты).

Я бы хотел изменить его на что-то вроде:

javax.faces.converter.DateTimeConverter.DATE = поле "{0}" со значением ({1}) должно быть дата

Однако я не уверен, как JSF автоматически заполняет {0} и {1}. Как указать мои собственные переменные в сообщении об ошибке JSF Converter?

Примечание: Я добавил, пытался создать свой собственный валидатор (не путать с конвертером), но похоже, что среда JSF выполняет преобразование перед валидацией в своем жизненном цикле.

1 Ответ

20 голосов
/ 05 марта 2011

Начиная с JSF 1.2, используйте атрибут converterMessage для замены всего сообщения, например:

<h:inputText value="#{user.dateOfBirth}" converterMessage="Format must be: yyyy-MM-dd">
    <f:convertDateTime pattern="yyyy-MM-dd" />
</h:inputText>

В противном случае JSF по умолчанию показывает сообщение _detail в <h:message>.Только когда вы используете <h:message showDetail="false" showSummary="true">, будет отображаться сообщение, подобное вашему вопросу.Я не уверен, какую версию JSF вы используете, но в моем JSF 2.0.3 подробное сообщение по умолчанию для f:convertDateTime выглядит следующим образом:

javax.faces.converter.DateTimeConverter.DATE_detail = {2}: ''{0}'' could not be understood as a date. Example: {1}

{2} будет заменен идентификатором клиента или атрибутом label поля ввода при его наличии.

<h:inputText value="#{user.dateOfBirth}" label="Date of birth">
    <f:convertDateTime pattern="yyyy-MM-dd" />
</h:inputText>

Для сообщений DATE_detail должны быть определены оба сообщения DATE и DATE_detailиспользоваться:

javax.faces.converter.DateTimeConverter.DATE=Date format must be: dd/mm/yyyy 
javax.faces.converter.DateTimeConverter.DATE_detail=Date format must be: dd/mm/yyyy

См. также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...