Русский English Тэги View Sergey Zolotaryov's profile on LinkedIn Вход
MyFaces не вызывает валидаторы, если поле пустое
Постоянная ссылка 11-05-2007 anydoby java

Сегодня заметил неприятную фичу в имплементации MyFaces JSF: она не вызывает валидаторы на поле, если значение пустое.

Вот метод из UIInput, из-за которого происходит сия неприятность:


    protected void validateValue(FacesContext context,Object convertedValue)
    {
        boolean empty = convertedValue == null ||
                        (convertedValue instanceof String
                         && ((String)convertedValue).length() == 0);

        if (isRequired() && empty)
        {
            _MessageUtils.addErrorMessage(context, this, REQUIRED_MESSAGE_ID,new Object[]{getId()});
            setValid(false);
            return;
        }

        if (!empty)
        {
            _ComponentUtils.callValidators(context, this, convertedValue);
        }

    }

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

Единственный способ обойти этот глюк - всунуть кусок кода с проверкой и добавлением сообщения внутрь самого метода action/actionListener :(

Добавить комментарий

anydoby
12-05-2007

да. забыл. можно ж еще написать жалобу на apache и поправить

Предыдущая статья Toplink Essentials на Weblogic 10 Следующая статья JScrollPane не обновляет скролбары при изменении размеров компонентов наследников