Необязательное поле с проверкой минимальной длины в 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}$" />