게시판3) ID 중복확인
in Web Dev on Java Spring
1. ID 중복확인
2. 동적 쿼리의 사용
1. ID 중복 확인 흐름
- 아래와 같이, ID 중복 확인을 누르면 작은 화면이 떠, 그 화면에서 중복확인을 할 수 있게 할 수 있도록 할 것이다. 부모창에서 자식창을 띄우고 그 값을 입력받는 것은 다음에 잘 설명해 놓았다.
여기선 어떻게 DB에서 중복된 데이터를 찾을 수 있는 지를 보도록 할 것이다. ajax를 사용하면 실시간으로 간편하게 이 기능을 구현할 수 있다고 한다. 그것은 나중에 해보도록 하고, 오늘은 좀 복잡한 방법으로 기능을 구현할 것이다.
버튼을 누르면 서버에 정보를 보낸다. 아래 코드를 보면, form 의 method를 POST로 정했기 때문에, controller 객체의 @RequestMapping(value=”/idCheck”, method= RequestMethod.POST) 를 찾아간다.
idCheck.jsp
<form action="" method="POST" id="form"> <input type="text"id ="userid" name = "userid" value = "${userid}" placeholder = "검색할 ID 입력"> <input type="button" id = "btn_idcheck" value= "검색"> </form>
idCheck.javascript
var form = document.getElementById("form"); form.submit();
위와 매핑되는 컨트롤러의 함수이다. 위에서 name:value의 형태로 서버에 정보가 넘어간다. (userid : ${userid}). 이걸 member로 받았다. 근데 아마 스프링 측에서 userid 에 setter 함수를 불러서 알아서 처리해 줄 것 같다 (확인하기) 그래서 arg로 들어온 member 인스턴스에는 userid의 정보만 있고 다른 애들은 다 null값을 가진다.
//id 중복확인 처리 요청 @RequestMapping(value="/idCheck", method= RequestMethod.POST) public String idCheck(Member member, Model model){ //select * from member where userid = #{}; Member m = repository.selectOne(member); model.addAttribute("member",m); model.addAttribute("userid",member.getUserid()); return "member/idCheck"; }
id 정보를 member 에 담아 repository.selectOne 받는다. 만약 찾았으면 m이 null 이 아니고, 못찾았으면 null 일 것이다. 이 작업이 끝나면 member/idCheck으로 다시 돌아가야기 때문에 리턴을 저렇게 해준다.
idCheck.jsp
컨트롤러 함수에서 작업을 처리한 후 돌아왔다. 서버에는 member이라는 이름의 객체가 있다. 만약 null이면 못찾은 것이니까 id 사용가능. 그리고 이 문구는 항상 pageContext.request.method 가 POST 방식일 때에만 보여야한다. 그래서 아래와 같은 조건을 써준다.
<c:if test="${pageContext.request.method eq 'POST' and member.userid eq null}">
<span>${userid}는 사용가능한 id입니다.</span>
<input type = "button" id = "userid" value = "ID 사용하기" onclick="idSelect('${userid}')"></c:if>
<c:if test="${ pageContext.request.method eq 'POST' and member.userid ne null}">
<span>${userid}는 사용할 수 없는 id입니다.</span></c:if>
2. 동적 쿼리의 사용
- 게시판2에서 사용한 Repository.selectone 함수는 DB에서 ID와 PWD 둘 다 불러오는 것이었다. 이 작업에서는 PWD까지 불러올 필요는 없고, ID만 불러오면 된다. 그래서 동적쿼리를 사용해준다.
<!-- 동적쿼리!!!! 개념!!if 문같이 함, login 과 idcheck 에 이 코드를 쓸 수 있다. ${}안쓴다!! el 표기법이 아니라, xml 문법이다. -->
<select id = "selectOne" parameterType = "map" resultType = "Member">
SELECT
userid
, userpwd
, gender
, email
,phone
,hobby
,to_char(birth,'YYYY-MM-DD')
, address
FROM
member
WHERE
userid= #{userid}
<if test="userpwd !=null">
AND
userpwd= #{userpwd}
</if>
</select>
◇ Spring 게시판 포스팅 시리즈 ◇