728x90

아이디 중복 확인에 대한 처리를 하자.

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";
	}
728x90

+ Recent posts