Проверка пустых полей с помощью встроенного метода проверки и класса валидатора - PullRequest
4 голосов
/ 23 февраля 2012

У меня есть следующее поле ввода:

<h:inputText value=".." validator="#{labController.validateValue}"/>

Если поле пустое, оно не будет проверено (validateValue в labController не вызывается).

Но с использованиемотдельный класс валидатора:

<h:inputText value=".." >
  <f:validator validatorId="labDateValidator"/>
</h:inputText>

тогда его метод validate будет хорошо вызываться даже при пустом поле ввода?

Это то, что я наблюдаю.Зависит ли это поведение от реализации или версии (я использую Mojarra 2.1)?

Предпосылкой является то, что я хочу использовать свой собственный метод / класс для всех задач проверки, включая требуемую проверку.Работает ли он только с классом валидатора?

1 Ответ

6 голосов
/ 23 февраля 2012

У вас есть недосмотр в JSF.validator заключен в MethodExpressionValidator, который в соответствии с источником его метода validate() действительно пропускает проверку, когда значение равно null.

if (value != null) {
    try {
        ELContext elContext = context.getELContext();
        methodExpression.invoke(elContext, new Object[]{context, component, value});
        ...

Это не касается нового параметра контекста JSF 2.0 javax.faces.VALIDATE_EMPTY_FIELDS, который по умолчанию равен true.На самом деле он должен делать то же самое, что и UIInput#validate().

if (!isEmpty(newValue) || validateEmptyFields(context)) {
    try {
        ELContext elContext = context.getELContext();
        methodExpression.invoke(elContext, new Object[]{context, component, value});
        ...

Об этом уже сообщалось как Mojarra выпуск 1508 .Я проголосовал за него и добавил новый комментарий, чтобы разбудить их.

...