7일차 목표
회원가입
회원가입 한 아이디로 로그인 가능 ---- 완료
로그인 한 회원의 정보 확인
로그인 회원 글 리스트 확인 가능
해당 글 조회 가능
해당 글 수정 및 삭제 가능
로그아웃
현재 회원 가입 페이지가 완성 직전이다
아이디 중복체크에 대한 hidden 값을 변동 시켜줌으로써 먼저 회원가입 폼을 완성시키고
게시판 쪽으로 넘어갈 생각이다
hidden 값 변동 순서
hidden으로 처리하고 싶은 처리는
생각보다 간단하게 처리할 수 있었다
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의 수정이 조금 필요해 보인다