Включить имя поля в сообщения об ошибках, сгенерированные аннотированными валидаторами в JSF - PullRequest
3 голосов
/ 24 января 2012

Очень удобно использовать проверку бина, например javax.validation.constraints.Size, в моем коде Java, например:

@Size(min=1,max=30)protected String custName;

, а не эквивалентный словар, встроенный в страницу .xhtml, например:

<f:validateLength minimum="1" maximum="30" />

Проблема, с которой я столкнулся, заключается в том, что я не могу заставить имя поля появляться в сообщении об ошибке.Я могу настроить сообщение, добавив следующую запись в ValidationMessages.properties в корне моего исходного каталога:

javax.validation.constraints.Size.message={0} value is too long.

Но вместо {0} не подставляется никакое значение.В результате, хотя аннотированные валидаторы прекрасно работают для простых страниц, где я могу включить отдельный <p:message /> для каждого поля формы, они не так хорошо работают для более сложной (например, с вкладками) формы, где мне нужно сгруппировать свои сообщенияв верхней части страницы.Есть ли обходной путь для этого, или мой единственный разумный выбор - использовать валидаторы JSF?

1 Ответ

4 голосов
/ 24 января 2012

{0} представлен атрибутом label компонента ввода на стороне вида, который по умолчанию равен идентификатору клиента, если он не указан.

Например,

<h:inputText value="#{bean.customer.name}" label="Customer name">

Вы такженеобходимо переопределить формат JSF по умолчанию для сообщений валидатора бина.Вам необходимо добавить следующую запись в пакет сообщений JSF, как указано в <message-bundle> из faces-config.xml:

javax.faces.validator.BeanValidator.MESSAGE = {1} {0}

В этой конкретной записи {1} будет меткой входного компонента JSF и{0} будет сообщением валидатора бина.

...