Пользовательские переменные в сообщении об ошибке конвертера JSF

У меня есть страница формы, у которой есть поле 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?

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

Ответ 1

Начиная с 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 и DATE_detail должны быть определены для сообщения 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

См. также: