spring 2.5 때만 해도 controll에서 validation 체크 하기가 매우 귀찮았습니다.
validation 해주는 클래스를 따로 만들어서 해줘야하는 했거던여 -_-+(정말 노가다성 이였죠 ㅠ.ㅠ)
spring3 에서는 @valid 라는 어노테이션을 사용해서 획기적으로 코드량을 줄였습니다! 후후?
자.. 그럼 이제 초보자도 쉽게 따라 할 수 있는 validation 체크에 대해서 배워 보도록 하죠?^^
가장 먼저 해야하는 것은 라이브러리를 추가 해줘야겠죠!
꼭 필요한 라이브러리는 validation-api-1.0.0.GA.jar 요넘입니다.
그리고 옵션 라이브러리도 있는데요
com.springsource.org.hibernate.validator-4.2.0.Final.jar 요넘입니다.
hibernate validator 라이브러리는 옵션입니다. 이 라이브러리 쓸 분들은 추가 해줘서 쓰면 됩니다^^
이제 applicationContext 에 추가해줘야할 xml 구문을 코딩해줘야겠죠?!
<mvc:annotation-driven validator="validator"/> <!-- validation --> <beans:bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> |
이제 @valid 를 사용 할 수 있는 환경 세팅은 끝났습니다. (매우 간단하죠?^^)
이제 jsp 페이지 코딩을 보겠습니다.
<form:form commandName="springForm" action="/temp/springFormInsert.ow" method="POST"> <table border="1"> <tr> <td>usrId</td> <td><form:input path="usrId" value="${springForm.usrId}"/> <font color="red"> <form:errors path="usrId" /> </font> </td> </tr> <tr> <td>passwd </td> <td><form:password path="passwd" /> <font color="red"> <form:errors path="passwd" /> </font> </td> </tr> <tr> <td>content </td> <td><form:textarea path="content" rows="10" cols="100" value="${springForm.content}"></form:textarea> <font color="red"> <form:errors path="content" /> </font> </td> </tr> <tr> <td>selectChk</td> <td> <form:checkboxes path="selectChk" items="${selectChk}"/> </td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="전송" /></td> </tr> </table> </form:form> |
이렇게 코딩을 하고 submit을 누룹니다. 그럼 dispatcher 요넘을 타고선 ~ 해당 컨트롤러 메소드에 꽂힐 겁니다.
이제 컨트롤러 메소드 코드를 보겠습니다.
@RequestMapping(value="/springFormInsert.ow", method=RequestMethod.POST) public String insertSpringForm(@ModelAttribute("springForm") @Valid TempValidateVo tempValidateVo, BindingResult result, Model model){ logger.info("welcome to /temp/springFormInsert.ow"); //validation check if(result.hasErrors()){ Map<String, Object> checkMap = new LinkedHashMap<String, Object>(); checkMap.put("1", "1"); checkMap.put("2", "2"); checkMap.put("3", "3"); checkMap.put("4", "4"); checkMap.put("5", "5"); checkMap.put("6", "6"); model.addAttribute("selectChk", checkMap); return "temp/tempInsertPage"; } logger.debug("selectChk : "+tempValidateVo.getSelectChk().toString()); int resultCnt = commonDao.insert("temp.insertTempValidate", tempValidateVo); if(resultCnt > 0){ logger.info("insertTempValidate 성공!"); }else{ logger.warn("insertTempValidate 실패!"); } return "redirect:/temp/tempInsertPage.ow"; } |
여기서 잘 보셔야 할것이 빨간색 글자들인데요.
@ModelAttribute 는 바인딩 하는 어노테이션이라고 생각하시면 될 겁니다.
@Valid 는 validation 체크를 하겠다는 선언과 같은 겁니다.
BindingResult 인터페이스는 @Valid 에서 유효성 체크한 것을 result 로 던져 줘서 result.hasErrors()를 통해서 유효하지 않은 것들을 걸러주는 역할을 합니다.
이제 궁금한개 생기실겁니다.
@ModelAttribute("springForm") @Valid TempValidateVo tempValidateVo 이 부분에서 TempValidateVo 는 모하는 녀석일까요?
바로 이녀석에서 어노테이션을 이용해서 유효성을 선언해주는 것입니다.
public class TempValidateVo extends BaseObjectBean{ private int idx; @Size(min=4,max=10) @NotNull private String usrId; @Size(min=6, max=20) @NotNull private String passwd; @Size(min=1, message="입력해주세요") @NotNull private String content; @NotNull private List<String> selectChk; private String entDtTm; public String getEntDtTm() { return entDtTm; } public void setEntDtTm(String entDtTm) { this.entDtTm = entDtTm; } public int getIdx() { return idx; } public void setIdx(int idx) { this.idx = idx; } public String getUsrId() { return usrId; } public void setUsrId(String usrId) { this.usrId = usrId; } public String getPasswd() { return passwd; } public void setPasswd(String passwd) { this.passwd = passwd; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public List<String> getSelectChk() { return selectChk; } public void setSelectChk(List<String> selectChk) { this.selectChk = selectChk; } } |
이렇게만 코딩해주면 validation체크는 끝났습니다.
그럼 모두들 즐코딩 하세요 ^^
[출처] [SPRING]@valid를 이용한 스프링3 validation 체크|작성자 빼빼로