Как проверить числовые поля с помощью validateRegex на JSF-странице? - PullRequest
9 голосов
/ 29 февраля 2012

В управляемом бине у меня есть свойство типа int.

@ManagedBean
@SessionScoped
public class Nacharbeit implements Serializable {

private int number;

На странице JSF я пытаюсь проверить это свойство только для 6-значного цифрового ввода

               <h:inputText id="number"
                         label="Auftragsnummer"
                         value="#{myController.nacharbeit.number}"
                         required="true">
                <f:validateRegex pattern="(^[1-9]{6}$)" />
            </h:inputText>

Во время выполнения получаю исключение:

javax.servlet.ServletException: java.lang.Integer cannot be cast to java.lang.String

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

Является ли регулярное выражение неправильным?Или ValidateRegex только для строк?

1 Ответ

24 голосов
/ 29 февраля 2012

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...