포트폴리오 7일차

김상복·2022년 5월 31일
0

포트폴리오

목록 보기
7/8

7일차 목표

회원가입
회원가입 한 아이디로 로그인 가능 ---- 완료
로그인 한 회원의 정보 확인
로그인 회원 글 리스트 확인 가능
해당 글 조회 가능
해당 글 수정 및 삭제 가능
로그아웃

현재 회원 가입 페이지가 완성 직전이다

아이디 중복체크에 대한 hidden 값을 변동 시켜줌으로써 먼저 회원가입 폼을 완성시키고
게시판 쪽으로 넘어갈 생각이다


hidden 값 변동 순서

hidden으로 처리하고 싶은 처리는

  1. id 중복 처리 - hidden 태그인 idCheckVal에 해당 id 값을 저장
  2. form태그의 submit을 보낼 때 해당 idCheckVal의 Value 값과 input태그의 id값이 다를 경우 알림창을 띄워 중복확인을 할 수 있도록 안내
  3. 모든 것이 완벽할 때 회원가입 처리

생각보다 간단하게 처리할 수 있었다

hidden 태그를 사용해서 값을 받은 뒤 비교해서 처리하면 되는 것 이였다

else if($('#idCheckVal').val() != id){
                alert('id 중복 확인을 해주세요');
                return false;
		}

해당 코드를 보면 알 수 있지만

hidden 태그에 있는 있는 값은 id 값을 중복 확인을 눌렀을 때 저장이 되고
해당 값이 나중에 submit으로 전송 될 때 해당 id와 hidden 태그 안의 값을 비교해서 같으면 중복 확인을 한 것으로 처리해서 회원가입을 성공 시킨다


로그인 후 게시글 처리

로그인 처리를 할 때 Controller 코드를 보자

[Controller]

	@PostMapping("/login")
	public String login(UserVO vo, Model model) {
	
	
	boolean	userNumber = service.login(vo);
	
	
	System.out.println("GetLogin");
	
	if(userNumber == true) {
		
		model.addAttribute("list",list);
		
		return "/board/list";
	}else{
		
		model.addAttribute("check",false);
		
		return "/user/login";
	}
}

[mapper]

	<!-- login -->
	<select id="login" resultType="boolean">
		select count(*) from test_user where id=#{id} and password=#{password}
	</select>
	

원래 코드에서는 로그인 기능에만 주목을 해서 mapper의 반환형을 boolean을 받았다


로그인

원래 Controller와 jsp를 보면

[Controller]

@PostMapping("/login")
public String login(UserVO vo, Model model) {

        
        boolean userNumber = service.login(vo);
        
        System.out.println("GetLogin");

        if(userNumber == true {
		      return "/board/list";
        }else{

            model.addAttribute("check",false);

            return "/user/login";
        }
    }

[jsp]

<h3>login</h3>
<c:if test="${check == false }">
	<script>
      alert('로그인에 실패하였습니다');
    </script>
</c:if>
	
<form action="/user/login" method="post">

	<label>아이디</label><br>
	<input type="text" name="id"><br>

	<br>
	<label>비밀번호</label><br>
	<input type="password" name="password"><br>

	<br>
	<input type="submit" value="전송">
	<input type="reset" value="초기화">
</form>

[mapper]

	<!-- login -->
	<select id="login" resultType="boolean">
		select count(*) from test_user where id=#{id} and password=#{password}
	</select>

간단하게 설명하자면

아이디와 비밀번호를 DB에서 비교 했을 때 해당 데이터가 존재하면 로그인을 시켜주고
하나라도 일치 하지 않을 시 로그인에 실패하였습니다라는 알림창을 띄울 수 있도록 코드를 작성했다

하지만 여기서 문제는 나는 로그인을 하고 난뒤

Board 테이블의 List를 페이지에 띄우게 하고 싶은데

User 테이블과 Board 테이블은 userNumber 라는 공통 컬럼을 가지고 있어서 이 데이터를 가져가서 Board 테이블의 모든 컬럼들을 불러와야 했다. 그렇기 boolean이라는 반환형을 가지면 안되는 것이다

그렇기에 Mapper를 int형으로 수정하고 해당 데이터들을 전부 변환시켰다

[Controller]

@PostMapping("/login")
public String login(UserVO vo, Model model) {
	
	int userNumber;
	try {
		userNumber = service.login(vo);
	}catch(Exception e)
	{
		userNumber = 0;
	}
	
	System.out.println("GetLogin");
	
	if(userNumber >= 1) {
		
		BoardVO list = service.boardCheck(userNumber);
		model.addAttribute("list",list);
		
		return "/board/list";
	}else{
		
		model.addAttribute("check",false);
		
		return "/user/login";
	}
}

[mapper]

	<!-- login -->
	<select id="login" resultType="int">
		select userNumber from test_user where id=#{id} and password=#{password}
	</select>
    
    

먼저 mapper를 보면 id와 password가 일치하는 userNumber를 int형으로 받아 올 수 있게 작성했다

그리고 난 뒤 Controller를 보자

try catch 문을 사용해서 오류가 생겼을 때, 즉 아이디나 password가 일치 하지 않아서 mybatis에서 문제가 생겼을 때에는 catch문의 userNumber에 0을 넣어주고, 성공적일 때는 mybatis의 결과 값을 usernumber에 넣어서

BoardVO list = service.boardCheck(userNumber);

BoardVO에 넣어줬다, 그리고 이 데이터를 원래 c:foreach를 활용해서 모든 데이터를 테이블에 출력하려고 했으나 내가 착각한 사실이 있었다. 그건 c:foreach의 모든 데이터를 확인하는 items에는 Collection 계열의 데이터만 들어갈 수 있었고 그건 내일 진행해보도록 하자. mapper의 수정이 조금 필요해 보인다

profile
초보 개발자

0개의 댓글