본문 바로가기
Hot Tech Reference/Spring Framework

[SPRING]@valid를 이용한 스프링3 validation 체크

by cusmaker 2012. 6. 12.
반응형

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 체크|작성자 빼빼로