В форме есть поле bankCode, должно передаваться только числа, т.е.надо сделать валидацию, если есть символы (например 2344ро43), то показать ошибку. Я так понимаю, надо написать свой класс, расширяющий PropertyEditorSupport.
Я делаю так, но непашет.

Подскажите, что я нетак сделал.
public void setAsText(String text) throws IllegalArgumentException {
Integer intText = new Integer(text);
if (!StringUtils.hasLength(text)) {
setValue(null);
}else{
for (int i = 0; i < text.length(); ++i) {
setValue(intText);
if ((Character.isDigit(text.charAt(i))) == false) {
setValue(new Integer(-1));
break;
}
}
}
}
и потом в классе валидации я проверяю, если -1 — то выдаю ошибку, если null или число — то должно пройти,т.к. поле необязательное для заполнения.
Здравствуйте, serjik, Вы писали:
для целей валидации кажися больше подходит
Validator,
на интовость попроще проверять с помощью Integer.valueOf(...) и ловить эксепшн
а у вас в объекте формы это поле типа Integer? если да, то как реагирует спринг на ввод туда не интового значения? (сорри, лениво проверять)
Здравствуйте, serjik, Вы писали:
Если все равно используете
StringUtils, то для проверки на числовое значение можно исользовать
StringUtils.isNumeric(text)
Описание
здесь.
Сделал чтобы валидация нормально реагировала на ввод числового значения и показывало сообщение, когда в вводимом значении присутствуют символы. Но это поле необязательное для заполнения, и если ничего невводить, то выкидывает такую ошибку:
Failed to convert property value of type [java.lang.String] to required type [java.lang.Integer] for property bankCode; nested exception is java.lang.NumberFormatException: For input string: ""
Парни, подскажите плиз, как привально доделать
Класс валидации:
public class DepartmentValidator implements Validator {
public boolean supports(Class clazz) {
return Department.class.isAssignableFrom(clazz);
}
public void validate(Object obj, Errors error) {
Department department = (Department) obj;
ValidationUtils.rejectIfEmptyOrWhitespace(error, "departmentName", "required","заполните поле");
Integer bankCode = department.getBankCode();
if(bankCode == null){
error.rejectValue("bankCode", "nonNumeric", "вводите только числовые значения");
}
}
}
MyIntegerEditor
public class MyIntegerEditor extends PropertyEditorSupport {
public void setAsText(String text) throws IllegalArgumentException {
if (StringUtils.isNumeric(text)==false) {
setValue(null);
}else{
setValue(new Integer(text));
}
}
public String getAsText() {
Object value = getValue();
if (value != null) {
return value.toString();
} else {
return "";
}
}
}
Здравствуйте, serjik, Вы писали:
S>Сделал чтобы валидация нормально реагировала на ввод числового значения и показывало сообщение, когда в вводимом значении присутствуют символы. Но это поле необязательное для заполнения, и если ничего невводить, то выкидывает такую ошибку:
S>Failed to convert property value of type [java.lang.String] to required type [java.lang.Integer] for property bankCode; nested exception is java.lang.NumberFormatException: For input string: ""
S>Парни, подскажите плиз, как привально доделать
S>Класс валидации:
да вроде все должно правильноотрабатывать и без дополнительных костылей. Тю.е. никаких доп. editor-ов не нужно.