Прежде всего, ваше регулярное выражение неверно. Вам нужно поставить $
в конце, вот так ^([0-9]+)?$
.
Это не работает, как вы могли ожидать:
if (inputFromField.length() <= 0) {
msg = new FacesMessage("You must enter a value greater than 0");
throw new ValidatorException(msg);
}
inputFormField.length()
- длина текста, которая не может быть меньше 0, и даже если она больше 0, вы можете ввести отрицательное значение, например, "-1"
длиной 2.
Если я правильно вижу исключение, вы получаете ClassCastException. Взгляните на строку 44 (о которой вам сообщает сообщение об исключении), которая, как мне кажется, String inputFromField = (String) value;
Вы определили конвертер для этого поля? Если это так, value
может быть Integer
, а не String
.
Edit:
Обратите внимание, что ваш валидатор на самом деле пытается сделать две вещи: преобразовать входные данные в целое и проверить значение целого числа. В JSF у вас обычно есть два класса, которые делают это:
- сначала вызывается конвертер, чтобы преобразовать строку в целое число, и наоборот, особенно если ваше поле модели является целым числом - здесь вы должны проверить, действительно ли вы получили целое число
- секунду вы проверяете целочисленное значение, например, применяя минимум - здесь вы используете валидатор
Также обратите внимание, что уже есть встроенные валидаторы, которые делают то, что вы хотите. Взгляните на <f:validateLongRange minimum = "0"/>
например.