반응형

우선 간단한 게시판을 만들고 있는데

이전에 배운 validation 체크를 해보려고 한다. 

방법은 매우 간단다하다. 

 

우선 부트스트랩 기능을 적극 이용할 예정이다. 

 

벨리데이션체크하는 방법은 

크게 두가지가 있는데 

 
첫번째는 model 객체에 vaild를 사용하여

@Size 등 어노테이션을 이용하는 것이다. 

 

 

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotNull
@Size(min = 2,max = 30 , message = "제목은 2자이상 30자 이하 입니다.")
private String title;
@NotNull
@Size(min = 1, message = "내용을 입력해주세요.")
private String content;

 

한다면 이와 같이 정의 할 수 있다. 

 

 <div class="form-group">
          <label for="title">제목</label>
          <input type="text"  class="form-control"  th:classappend="${#fields.hasErrors('title')} ? 'is-invalid'" id="title" th:field="*{title}" >
          <div class="invalid-feedback" th:if="${#fields.hasErrors('title')}" th:errors="*{title}">
            제목 에러메시지
          </div>
        </div>
        <div class="form-group">
          <label for="content">내용</label>
          <textarea class="form-control"  id="content" rows="3" th:field="*{content}"  th:classappend="${#fields.hasErrors('content')} ? 'is-invalid'"></textarea>
          <div class="invalid-feedback" th:if="${#fields.hasErrors('content')}" th:errors="*{content}">
            내용 에러메시지
          </div>

 

그 후 타임리프 th:if ="fields.haserrors"로에러가 있다면 에러 메시지를 반환한다.

 

보시다시피 #fields.hasErrors(...) 함수는 매개변수(datePlanted)로 필드 표현식을 수신하고 해당 필드에 유효성 검사 오류가 있는지 여부를 알려주는 부울 값을 반환합니다. 또한 해당 필드에 대한 모든 오류를 얻고 반복할 수 있습니다.

타임리프 공식홈페이지 발췌 

 

그 classAppend로 클래스를  추가해 준다. 

 

is-invalid

추가해 주면 된다.

 

두번째 방법을 알아보자 

 

import org.thymeleaf.util.StringUtils;

@Component
public class BoardVaildator implements Validator{

    @Override
    public boolean supports(Class<?> clazz) {
        return Board.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        Board board = new Board();
        if(StringUtils.isEmpty(board.getContent())){
            errors.rejectValue("content", "key" ,"내용을 입력하세요");
        }

    }
}

이 방법은 벨리데이션 메소드를 만들어 서비스와 같이 동작을 하게된다. 

 

    @PostMapping("/form")
    public String greetingSubmit(@Valid Board board, BindingResult bindingResult){
//        vaildator.validate(board,bindingResult);
        if(bindingResult.hasErrors()){
            return "board/form";
        }
        boardRepository.save(board);
        return "redirect:/board/list";
    }
}

form에 전달될때 validator로 검증을 하면 위와 같이 동작한다. 

 

1번의 경우는 간단하지만 세밀한 조정이 어렵다.

2번 같은경우는 세밀한 조정이 가능하지만 클래스를 하나 더 만들어야 한다. 

 

https://github.com/MoonSeokHyun/SpringBoot

반응형

+ Recent posts