Vlidator - Property 파일 사용하기
이전 글에서 사용한 방법으로는 입력 필드에 값이 비어있는지만 확인할 수 있습니다. 아마도 Errors 객체를 사용할 때 값이 비어있는지 검사하려면 if 문이 자주 사용되니까 그 코드를 줄여주기 위해 만든것 같습니다.
따라서 빈 값인지 확인할 때는 유용하게 사용할 수 있지만 그 이외의 경우에는 Errors 인터페이스를 사용해야 한다.
Errors의 인터페이스 중에 에러 메시지를 기록할 수 있는 메소드들입니다.
인자의 종류를 살펴보면 다음과 같습니다.
errorCode :: 프로퍼티 파일에 있는 에러 메시지의 이름(키)
errorAgs :: 프로퍼티 파일에 있는 에러 메시지의 내용(값)을 출력할 때 특정 문자열을 넘겨 줄 수 있습니다. 그 때 이 아규먼트를 사용합니다.
defaultMessage :: 프로퍼티 파일에서 errorCode에 해당하는 메시지 키를 못찾으면 여기에 입력한 값을 출력합니다.
프로퍼티 파일을 사용하는 방법은 간단합니다.
<property name="basename" value="message" />
</bean>
위와 같이 messageSource를 등록합니다. 이 때 프로퍼티 파일의 이름을 basename에 입력해 줍니다. 만약 프로퍼티 파일이 여러개라면 besenames 속성을 사용하여 다음과 같이 list로 넘겨줍니다.
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>format</value>
<value>exceptions</value>
<value>windows</value>
</list>
</property>
</bean>
</beans>
그 다음 프로퍼티 파일을 작성합니다. 위 설정에서 message 라는 이름을 입력했으니까 프로퍼티 파일은 message.properties 또는 message_ko_KR.properties 이런식으로 입력값 뒤에 지역코드가 붙은 프로퍼티 파일도 자동으로 읽히게 됩니다.
passwordTooShort=Enter password at least 6 characters.
notSamePassword=Enter the same vlaue with password
프로퍼티에 저렇게 내용을 채우고 이제는 Validator를 만듭니다. 저번에 만든 코드에서 살짝 내용을 추가/수정했습니다.
public boolean supports(Class clazz) {
return MemberInfo.class.isAssignableFrom(clazz);
}
public void validate(Object object, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "required", new Object [] {"email"}, "Enter your email");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "required", new Object [] {"password"}, "Enter your password");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "confirmPassword", "required", new Object [] {"confirmPassword"}, "Enter the same password for confirmation");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "confirmMember", "required", new Object [] {"confirmMember"}, "Enter ajn member code");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "required", new Object [] {"name"}, "Enter your name");
MemberInfo memberInfo = (MemberInfo)object;
if(memberInfo.getPassword().length() < 6)
errors.rejectValue("password", "passwordTooShort");
if(!memberInfo.getPassword().equals(memberInfo.getConfirmPassword()))
errors.rejectValue("confirmPassword", "notSamePassword");
}
}
이제 실행해보면 다음과 같이 에러메시지들이 출력됩니다.