내 WebApplication을 Spring 3.0.5에서 3.1.1로 업그레이드 한 이후에 form-beans의 유효성을 검사 할 때 심각한 오류가 발생했습니다. 이전에 구성된 유효성 검사기가 더 이상 작동하지 않습니다. 문제는 그 방법 위해 GetFieldValue (문자열 필드 이름) 클래스 org.springframework.validation.Errors에서이해야한다 (그리고 예전)처럼 원래의 바인더 제본 빈 값을 반환하지 않습니다.Spring 3.1.1.RELEASE 데이터 바인딩 : 제출 된 양식의 유효성을 검사 할 때 오류가 발생했습니다.
이 내 폼 빈의 모습입니다 :
public class PersonBean extends BaseFormBean {
private String firstname; // getters and setter omitted...
private String lastname; // getters and setter omitted...
private Integer age; // getters and setter omitted...
public PersonBean() {}
@Override
public void validateForm(Errors errors) {
WebValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstname", "validator.requiredvalidator.lbl", "field required");
WebValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastname", "validator.requiredvalidator.lbl", "field required");
WebValidationUtils.rejectInvalidIntValue(errors, "age", "validator.std.age", "invalid age", false);
}
}
빈 속성을 확인하기 위해 사용되는 표준 방법을 가지고 호출됩니다 WebValidationUtils 수준. 이 오류는 String 유형이 아닌 값, Integer 유형의 특성 유효 기간과 같은 경우에만 발생합니다. 또한 콜렉션에서 발생합니다.
가 좀위한 추가적인 봄 콩을 구성해야합니까 ...import org.springframework.validation.Errors;
...
public abstract class WebValidationUtils {
...
public static void rejectInvalidIntValue(Errors errors, String field, String errorCode, String defaultMessage){
Assert.notNull(errors, "Errors object must not be null");
Object value = errors.getFieldValue(field); // returns the string value (type: java.lang.String)
Class<?> fieldType = errors.getFieldType(field); // returns the class Integer!
if (value == null || !value.getClass().equals(Integer.class) || ((Integer)value).intValue() <= 0){
errors.rejectValue(field, errorCode, null, defaultMessage);
}
}
}
빈 (bean) 자체가 결합 된 올바른 값이 있습니다
다음 코드는 정수 값을 내 유틸 수준에서 검증하는 방법을 보여줍니다 내 context-servlet.xml에서 3.0.5와 같은 bevahior를 달성합니까?
편집 : 방법의 공식 Spring Doku는 "위해 GetFieldValue는 (...)"
반환 지정된 필드의 현재 값, 중 현재 빈 속성 값 또는 마지막 바인딩에서 거부 업데이 트를 말한다 .
그래서 나는이 방법 대신 정수 유형의 전파 빈 값의 문자열 값을 반환하는 이유 단서 ... 당신이 바인딩 오류가 그렇게 getFieldValue()
반환 FieldError.getFieldValue()
을 가지고있는 것처럼
오케이, 그 트릭을 했어. 내 유효성 검사 클래스에서 org.springframework.validation.BindingResult라는 다른 인터페이스를 사용해야했습니다. 이 인터페이스를 사용하면 getRawFieldValue (String 필드) 메소드에 액세스 할 수 있었고 bean 속성의 원래 값을 읽을 수있었습니다. 하지만 스프링 프레임 워크의 업데이트가이 호기심 많은 행동으로 이어지는 이유를 알 수는 없습니까? thx 많이 jose! –