게시판3) ID 중복확인

1. ID 중복확인
2. 동적 쿼리의 사용

1. ID 중복 확인 흐름

  • 아래와 같이, ID 중복 확인을 누르면 작은 화면이 떠, 그 화면에서 중복확인을 할 수 있게 할 수 있도록 할 것이다. 부모창에서 자식창을 띄우고 그 값을 입력받는 것은 다음에 잘 설명해 놓았다.

1125sp5

  • 여기선 어떻게 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 게시판 포스팅 시리즈 ◇

  1. Spring 과 DB 연결하기
  2. 회원 가입 화면 구성
  3. ID 중복 확인 하기 - 현재 글
  4. 로그인 페이지 만들기
  5. 게시판 화면 구성하기
  6. 글 쓰기 기능 구현
  7. 글 확인 기능 구현
  8. 글 수정 기능 구현
  9. 게시판 페이징
  10. 파일 첨부 기능
  11. 파일 다운 기능
  12. MIME 타입
  13. 글 수정시 파일 변경

© 2018. All rights reserved.

Powered by Hydejack v8.5.2