spring, валидация поля (Integer)
От: serjik rogmkk.narod.ru
Дата: 06.02.07 21:22
Оценка:
В форме есть поле 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 или число — то должно пройти,т.к. поле необязательное для заполнения.
Re: spring, валидация поля (Integer)
От: dolor Китай  
Дата: 07.02.07 07:27
Оценка:
Здравствуйте, serjik, Вы писали:

для целей валидации кажися больше подходит Validator,

на интовость попроще проверять с помощью Integer.valueOf(...) и ловить эксепшн

а у вас в объекте формы это поле типа Integer? если да, то как реагирует спринг на ввод туда не интового значения? (сорри, лениво проверять)
Re: spring, валидация поля (Integer)
От: andrew_g Украина  
Дата: 07.02.07 08:26
Оценка:
Здравствуйте, serjik, Вы писали:

Если все равно используете StringUtils, то для проверки на числовое значение можно исользовать
StringUtils.isNumeric(text)

Описание здесь.
Re[2]: spring, валидация поля (Integer)
От: serjik rogmkk.narod.ru
Дата: 07.02.07 19:06
Оценка:
Сделал чтобы валидация нормально реагировала на ввод числового значения и показывало сообщение, когда в вводимом значении присутствуют символы. Но это поле необязательное для заполнения, и если ничего невводить, то выкидывает такую ошибку:
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 "";
            }
        }    
}
Re[3]: spring, валидация поля (Integer)
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 08.02.07 07:17
Оценка:
Здравствуйте, 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-ов не нужно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.