회원가입 페이지

아이디
이름
생년월일
비밀번호
비밀번호 확인

각 항목마다 Bean Validation추가

  • @Validated 사용위치 - @ModelAttribute 앞

  • @NotBlank / @NotEmpty / @NotNull 에 대한 차이 숙지(허용범위의 차이)
    https://velog.io/@invigorating92/beanValidation

  • Validation 실패로 생기는 에러 메시지 생성 과정 다시 공부 필요

  • Validation 오류 메시지 띄우기 위해 컨트롤러타임리프에 아래와 같은 코드 필요

컨트롤러
if (bindingResult.hasErrors()){
            log.info("검증 오류");
            return "members/addForm";
        }
  • return으로 가입 페이지에 다시 접근 후에 에러 메시지를 띄운다.
  • 기존에 작성한 내용은 유지된다. (password는 제외)
타임리프
<p th:errors="*{loginId}"></p> 
  • 각 th:field 마다 작성해줘야 함

아이디 중복체크

  • AJAX를 이용해야 하는 등 생각보다 복잡할 것으로 예상됨
  • MemberController 검증단계에서 글로벌 에러(bindingResult.reject())로 구현가능

생년월일

  • 일단은 숫자를 직접 입력하도록 만들었지만
  • 셀렉트 박스로 '연/월/일' 을 각각 선택하도록 만들어보기

비밀번호 확인

@PostMapping("/add")
    public String postAdd(@Validated @ModelAttribute(name = "member") Member member, BindingResult bindingResult){
        String password = member.getPassword();
        String rePassword = member.getRePassword();
        
  if(!password.equals(rePassword)){
              log.info("비밀번호 일치안함");
              log.info("password={}, rePassword={}",member.getPassword(), member.getRePassword());
              bindingResult.reject("notEqual");
              return "members/addForm";
        }
     }
  • if문에서 password == rePassword 이렇게 코드를 짜면 원하는 결과가 안나온다.
  • password.equals(rePassword)처럼 equals를 사용해야 한다.
  • bindingResult.reject로 글로벌 에러 추가
  • 에러 메시지 출력을 위해 아래와 같은 타임리프문 작성
타임리프
<div th:if="${#fields.hasGlobalErrors()}">
    <p th:each="err : ${#fields.globalErrors()}" th:text="${err}">글로벌 오류 메시지</p>
</div>
profile
차근차근

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN