Отображение пользовательского сообщения об ошибке для пустого поля в простом приложении JSF - PullRequest
5 голосов
/ 25 марта 2010

Я пробовал простое приложение JSF, в котором мне нужно проверить, не заполнено ли поле "имя", а затем отобразить сообщение об ошибке.

Код, который принимает значение поля:

<h:outputLabel value="Name"/>
<h:inputText value="#{greeting.name}" required="true">
    <f:validator validatorId="NumValidator"/>
</h:inputText>

Элемент управления программы не переходит в класс валидатора, если поле отправлено без ввода чего-либо, и отображает сообщение об ошибке по умолчанию:

j_id_jsp_869892673_1: j_id_jsp_869892673_4: Ошибка проверки: необходимо указать значение.

Как отобразить пользовательское сообщение для этого?

Ответы [ 3 ]

20 голосов
/ 25 марта 2010

В файле Message.properties хранятся сообщения проверки по умолчанию. Этот файл содержится в JAR библиотеки реализации JSF.

Если вы посмотрите на содержимое этого файла относительно обязательной проверки, вы увидите, что:

javax.faces.component.UIInput.REQUIRED={0}: Validation Error: Value is required.

Чтобы определить собственные сообщения об ошибках, создайте новый файл свойств, добавьте соответствующее сообщение об ошибке, например:

javax.faces.component.UIInput.REQUIRED=Hey, you forgot to fill the input {0}!

(обратите внимание, что {0} будет заменен идентификатором поля)

затем в вашем faces-config.xml определите новый message-bundle:

<message-bundle>package.that.contains.the.properties.file</message-bundle>

Так, например, если ваш my-messages.properties хранится в пакете foo / bar, вам нужно будет написать:

<application>
  ...
  <message-bundle>foo.bar.my-messages</message-bundle>
</application>

(обратите внимание, что вам не нужно указывать расширение .properties)

2 голосов
/ 25 марта 2010

Способ, предложенный romaintaz , определенно является подходящим. С другой стороны, если вы ищете дополнительную настройку, вы можете использовать слушатель фазы r, который запускается перед фазой ответа рендеринга, как и некоторые настройки.

Например, сначала определите значение ключа, как показано ниже:

javax.faces.component.UIInput.REQUIRED=INPUT_REQ_FAIL

затем для входных компонентов, требующих проверки, они передают атрибут с использованием атрибута f:. Затем в фазовом слушателе перебирают сообщения лица и проверяют наличие INPUT_REQ_FAIL и заменяют его на сообщение cutom вместе со значением атрибута для компонента.

0 голосов
/ 13 марта 2012

Я думаю, вам стоит взглянуть на JSR 303! Это полностью стандартный пользовательский ввод, он работает из коробки с JSF 2 (я использую My Faces). И что приятно, нет необходимости в xml или файлах свойств для указания пользовательских сообщений.

...