<f:validateRegex>
предназначено для использования только на свойствах String
.Но у вас есть свойство int
, для которого JSF уже преобразует переданное значение String
в Integer
до проверки.Это объясняет исключение, которое вы видите.
Но поскольку вы уже используете свойство int
, вы уже получите ошибку преобразования при вводе нецифровых чисел.Кстати, сообщение об ошибке преобразования настраивается атрибутом converterMessage
.Таким образом, вам вообще не нужно использовать регулярные выражения.
Что касается конкретного функционального требования, вы, похоже, хотите проверить минимальную / максимальную длину.Для этого вам следует использовать <f:validateLength>
.Используйте это в сочетании с атрибутом maxlength
, чтобы конечный пользователь не смог ввести более 6 символов.
<h:inputText value="#{bean.number}" maxlength="6">
<f:validateLength minimum="6" maximum="6" />
</h:inputText>
Вы можете настроить сообщение об ошибке проверки с помощью validatorMessage
с помощьюпуть.Итак, все со всеми это могло бы выглядеть так:
<h:inputText value="#{bean.number}" maxlength="6"
converterMessage="Please enter digits only."
validatorMessage="Please enter 6 digits.">
<f:validateLength minimum="6" maximum="6" />
</h:inputText>