아이디 중복 확인에 대한 처리를 하자.
UserMapper를 통해 입력한 id 값이 이미 있는 값인지를 확인하자. 이미 있는 값이면 user_name이라는 string을 반환하고, 중복이 아니라면 null을 반환한다.
@Select("select user_name " +
"from user_table " +
"where user_id = #{user_id}")
String checkUserIdExist(String user_id);
ServletAppContext에 UserMapper도 등록한다.
들어온 user_id 값을 통해 참/거짓 값을 반환하려면 일반 controller가 아닌 RestController를 사용해야 한다.
@RestController
public class RestApiController {
@Autowired
private UserService userService;
@GetMapping("/user/checkUserIdExist/{user_id}")
public String checkUserIdExist(@PathVariable String user_id) {
boolean chk = userService.checkUserIdExist(user_id);
return chk + "";
}
}
RestApi라는 Controller를 선언해서 위와같이 service를 사용 후 참, 거짓을 반환한다.
해당 url로 id를 넣어 접속해보면 true/false가 화면에 뜨는 것을 알 수 있다.

abcd라는 id가 중복이 없기 때문에 true를 반환한 것을 볼 수 있다.
이제 view에서 중복확인 버튼 태그를 클릭하면 함수를 실행하게하자.
<button type="button" class="btn btn-dark" onclick="checkUserIdExist()">중복확인</button>
</head>와 <body>태그 사이에 스크립트를 추가하자.
<script>
function checkUserIdExist(){
var user_id = $("#user_id").val()
if(user_id.length == 0 ){
alert('아이디를 입력해주세요')
return
}
$.ajax({
url : '${root}user/checkUserIdExist/' + user_id,
type : 'get',
dataType : 'text',
success : function(result){
if(result.trim()=='true'){
alert('사용할 수 있는 아이디입니다.')
$("#userIdExist").val('true')
}
else{
alert('사용할 수 없는 아이디입니다.')
$("#userIdExist").val('false')
}
}
})
}
user_id를 확인해서 반환값이 true면 사용 가능, false면 사용 불가능을 알리는 알람을 띄우고, userIdExist라는 변수에 true, false 값도 부여할 수 있다.
이 변수에 값을 부여하기 위해 view에 hidden form 태그를 하나 추가했다.
<form:hidden path="userIdExist"/>
이렇게 hidden으로 선언하면 보이지는 않지만 값을 담을 수 있게 된다.
UserBean에 userIdExist라는 boolean 변수를 추가해서 유효성 검사를 하게 된다.
validator에 아래 코드를 추가해서 user_id가 중복되면 유효성 검사를 하도록 하자.
if(userBean.isUserIdExist() == false) {
errors.rejectValue("user_id", "UserIdExist");
}
error_message.properties에는 아래 구문을 추가해준다.
UserIdExist.signInUserBean.user_id = 중복 확인을 해주세요.
중복 확인을 잘 하는 것을 확인할 수 있다.

만약 중복이 되었을 때 새로운 아이디를 입력하면 중복여부를 다시 확인하도록 코드를 추가하자.
<form:input path="user_id" class="form-control" onkeypress="resetUserIdExist()"/>
function resetUserIdExist(){
$("#userIdExist").val('false')
}
resetUserIdExist()는 중복확인 실패 후 새로운 아이디 값을 넣으면 false가 되도록 reset하는 함수이다.
위와 같은 방법으로 닉네임까지 중복처리를 마쳤다.
이제 회원 가입을 성공한 회원 정보를 저장을 해보자.
먼저 mapper에 insert문을 넣는다.
@Insert("insert into user_table (user_idx, user_id, user_name, user_pw, user_nickname, user_email) " +
"values(user_seq.nextval, #{user_id}, #{user_name}, #{user_pw}, #{user_nickname}, #{user_email})")
void insertUserBean(UserBean signInUserBean);
user_seq는 sql developer에서 전에 미리 만들어두었다.
mapper를 사용하도록 userDao, userService, userController도 알맞게 처리한다.
controller에서는 userService를 이용할 수 있도록 @autowired를 이용해 주입받고
signIn_pro에서 service를 이용해 호출만 해주면 된다.
완성된 가입 컨트롤러이다.
@PostMapping("user/signIn_pro")
public String signIn_pro(@Valid @ModelAttribute("signInUserBean") UserBean signInUserBean, BindingResult result) {
if(result.hasErrors()) {
return "user/signIn";
}
userService.insertUserBean(signInUserBean);
return "user/signIn_success";
}
'프로젝트 > 게시판미니프로젝트' 카테고리의 다른 글
[프로젝트] 상단 메뉴 처리, 및 로그아웃 (0) | 2020.05.08 |
---|---|
[프로젝트] 로그인 처리 (0) | 2020.05.08 |
[프로젝트] 회원가입 관리 (0) | 2020.05.07 |
[프로젝트] 상단 메뉴 관리 (0) | 2020.05.07 |
[프로젝트] 데이터베이스 테이블 & Mybatis 초기 설정 (0) | 2020.05.06 |