label/input/button 등을 form 태그로 변경해 주었고 form:errors 도 추가해 주었다. style 값을 통해 빨간색 글씨로 나오게끔 하였다.
위에서 action 이 user/join_pro 이기에 PostMapping 을 연결해 주었다. 유효성 검사가 목적이기 때문에 Valid 를 해주었고, jsp에서 modelAttribute 값에 맞게 joinUserBean으로 이름을 정해주었다. BindingResult도 해주었다.
밑의 IniBInder는 내가 에러메세지를 커스텀 할 때에 UserController에서 사용하기 때문에 선언해주었다.
검사는 다음과 같은 값으로 해주었다.
커스텀을 위해 UserValidator를 만들어 주었다.
에러 메서지 프로퍼티
를 메세지처리하여 다음과 같이 등록. PropertySourcePlaceholderConfigurer 는 db.properties를 해주기 위에서 맨 위에
@PropertySource() 가 있는데 이것과 충돌하지 않기 위해서 선언을 해주었다.
ㅡㅡㅡㅡㅡㅡㅡㅡ
아이디 중복검사를 하기위해서는 db에서 아이디가 있는지 확인을 하는 것이 우선이다. 그래서 mapper를 만들어 주었다.
user_id 매개변수로 받아와서 user_name 을 검색. mapper 만들어 주었으니 servletappcontext.java에 등록
이제 이걸 dao에서 사용해야겠지?
usermapper 주입받아서 checkUserIdExist 라는 메서드 생성. 이제 Service 로 가자
존재한다면 false 존재하지 않다면 null 를 반환.
이것을 controller에서 주입받아 처리를 해야한다. 응답결과로 보낼 것이 html 데이터가 아니라 그냥 데이터라고 한다면 restcontroller 를 이용하는 것이 훨씬 더 편하다.
restapi 같은 경우에는 클라이언트가 서버에 데이터를 보낼 때 파라미터를 보다는 패스밸류로 더 많이 보낸다. 그래서 PathVariable를 사용한 것이다. RestController의 메서드 같은 경우 문자열이 아닌 다른 것을 반환을 할 때에는 jackson 이용해서 json 바꿔줘야되고 해서 복잡하기 때문에 값을 하나만 보낼 경우에는 가급적 문자열로 바꿔서 보내는 것이 간단하다.
이제 jsp 의 중복확인 버튼에다가 onclick 으로 메서드를 달아주었다. checkUserIdExist().
동일 jsp 파일에 head가 끝나고 body가 시작되기 전에 script 로 메서드를 정의해 주었다.
존재 유무에 따라 userIdExist 밸류 값을 true/false로 변경시키는데, 자동주입이 되고 이런 변수를 사용하기 위해서는 form 태그 안에 path 값으로 선언이 되어있어야 한다. 따라서, form:form 밑에 form:hidden 으로 눈에 보이지는 않지만 path 값을 선언해주었다. 물론 userIdExist는 UserBean.class 에 변수 선언을 하고 getter/setter 또한 추가해주어야 한다.
validator에 추가로 이 useridExist()를 추가해주었다.
그리고 만약 중복체크를 해서 중복이 아니라고 떴는데 다시 재입력하거나 그럴 때에도 다시 중복확인을 해야될 것이다. 그렇기에 id 부분을 다시 누르면 userIdExist 값이 false가 되게끔 form:input 태그 부분에 onkeypress를 이용해서 resetUserIdExist() 메서드를 넣어주었고, script 태그안에 그 메서드를 선언해준 것을 볼 수가 있다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
이제 저장처리를 해보겠다.
mapper 설정이다. 평소 스타일 처럼 insert into user_table (~~) 사용하려 했는데 오류가 계속 떠서
앞에 값 지정해주고 values(~~) 를 해주었다. 그리고 query문 쭉 쓰다가 짤라야 되겠다 하는 부분에서 엔터치면
알아서 큰따옴표랑 + 붙여주더라.
dao,service,controller 부분은 이제 너무나도 자연스러운 것...
성공시에 alert와 함께, 자바스크립트에서 페이지 이동을 할 때 쓰이는 location.href 로 user/login 으로 이동시켰다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
아까 스크립트 메서드 선언 중에 ajax 통신을 이용한 것이 있는데, 이것을 정리해봐야겠다. 내일..
'공부 기록들' 카테고리의 다른 글
2020.04.29 미니 프로젝트(5) (정보수정) (0) | 2020.04.29 |
---|---|
2020.04.28 미니 프로젝트(4) (로그인 처리, 로그인 확인 처리, 상단 메뉴 처리) (0) | 2020.04.28 |
2020.04.26 - 미니프로젝트(2) (상단 메뉴 db 가져와서 구성하기) (0) | 2020.04.26 |
2020.04.24 - 미니프로젝트(1) (틀 구성하고 페이지 연결하기) (0) | 2020.04.24 |
2020.04.22~23 - MVC(8) (예외처리, MyBatis Java, MyBatis XML, RestController) (0) | 2020.04.23 |