현재 스프링 MVC 2.5를 사용하고 있으며, 모델/빈 클래스에 대해서는 서버 측 유효성 검사를 사용하고 있습니다. 입력 중 일부가 숫자가 아닌지 (0-9) 확인하고 싶습니다. 사용자는 '1234'대신 "abcd"와 같은 숫자가 아닌 문자를 입력 할 수 있습니다.스프링 MVC 프로퍼티/필드 바인딩 예외
저는 긍정적 인 BigDecimal (달러 금액을 나타냄) 만 허용하는 @Pattern
입니다.
public class OfferSettingBean implements Serializable {
private static final String NUMBER_WITH_DECIMAL_PLACES_ONLY="^\\d+([.]\\d+)?$";
//org.hibernate.validator.pattern
@Pattern(regex = NUMBER_WITH_DECIMAL_PLACES_ONLY, message = "invalid.amount")
private BigDecimal offerSize;
//the rest of the code goes here including setter and getter methods
}
JSP 페이지
<input type="text" name="offerSize" id="offerSize" value="${offerSetting.offerSize}" placeholder="$" />
내 코드의 문제이며, 사용자는 "asdfsd"심지어는 패턴을 확인해야합니다 점에 도달 나던 같은 비 숫자 문자를 입력합니다.
Failed to convert property value of type [java.lang.String] to required type [java.math.BigDecimal] for property offerSize; nested exception is java.lang.NumberFormatException
문제는 패턴을 검사하기 전에 문자열 값을 BigDecimal에 바인딩하여 실패하게한다고 생각합니다.
하나의 추악한 솔루션이 offerSize setter 메소드에있을 수 있습니다. 다음 값을 확인하고 숫자가 아닌 경우 무언가를 할 수 있습니다. 하지만 나는 그걸 좋아하지 않는다.
이러한 종류의 바인딩 문제를 처리하는 더 좋은 방법은 무엇입니까?
FYI : 저는 클라이언트 측 유효성 검사 (JQuery 사용)를 할 것입니다. 이제는 사용자가 클라이언트 측 유효성 검사를 어떤 방식으로 통과시키는 것으로 가정합니다.
내가 패턴을 갖고 싶었던 이유는 모든 입력 문자가 검증 된 중앙 위치에 있어야하기 때문입니다. 그래서 그것이 부정이거나 아닌지, null인지 아닌지, 숫자가 포함되어 있는지 아닌지 확인해야합니다. 두 번째 것은 가능하지만 당신이 말했듯이 그것은 나쁠 수도 있습니다. 후자의 질문을 위해 시스템은 10 년 전에 설계되었으므로 BigDecimal 만 사용해야합니다. – WowBow