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

У меня есть форма регистрации с необязательным полем, но если вы введете какое-либо значение, оно должно быть более 2 символов. Как пропустить проверку, если пользователь оставляет поле пустым?

 <h:inputText id ="fooid" maxlength="50" tabindex="4" value="#{registrationBean.foo}"  validatorMessage="Please enter two or more characters">
 <f:validateRegex pattern="^[A-Za-z-_./\s]{2,50}$"/>
 <f:ajax event="blur" render="fooPanel" />
 </h:inputText>

Любая помощь будет оценена.

1 ответ

Решение

Это работает как задумано, если вы добавите следующий параметр контекста:

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

Это скажет JSF интерпретировать пустую строку представленных значений как null, Если значение nullтогда только required="true" валидатор будет запущен, а другие валидаторы - нет. Дополнительным преимуществом является то, что он не содержит загроможденных пустых строк в вашей модели, когда конечный пользователь не заполнил входные данные.

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

 <f:validateRegex pattern="^$|^[A-Za-z-_./\s]{2,50}$" />
Другие вопросы по тегам