8일차 목표
회원가입 ------ 완료
회원가입 한 아이디로 로그인 가능 ----- 완료
로그인 한 회원의 정보 확인
로그인 회원 글 리스트 확인 가능 ----- 진행 중
해당 글 조회 가능
해당 글 수정 및 삭제 가능
로그아웃
생각보다 멈춰있지만 차근차근 나아가고 있다
어제 만들었던 회원가입 폼은 완전히 완성되었고
오늘은 글 리스트 확인 기능과 글 생성 및 조회를 진행해볼 예정이다
로그인 후 리스트 띄우기
어제 foreach에 처음에는 그냥 VO 를 넣어서 사용할려고 했으나 오류가 떠서 확인해보니
items에는 Collction 타입의 데이터만이 들어갈 수 있다는 것을 알았다
그렇기에 mapper 클래스와 인터페이스 Controller를 수정했다
[mapper]
<!-- BoardCheck -->
<select id="boardCheck" resultType="com.bok.domain.BoardVO">
select * from test_board where userNumber=#{userNumber}
</select>
[interface]
List<BoardVO> boardCheck(int userNumber);
이렇게 mapper는 그대로 이지만 service 인터페이스의 반환형을 List로 받고 거기에 제네릭으로 List 안에 들어갈 데이터는 반드시 BoardVO라고 지정해줌으로써 완벽하게 리스트가 출력되는 것을 알 수 있다
글 생성
글 생성 폼을 만들기는 굉장히 쉽다
하지만 문제가 있다면 그 문제는 바로 어떻게 userNumber를 페이지에 로그인 된 동안 저장해놓고 꺼내다 쓸 것인가이다. 물론 Model에 저장해서 계속 RequestParam, Model을 하면 데이터를 가져올 수도 있지만 이런 방법 보다 조금 더 괜찮은 방법이 없는지 생각하던 도중 예전에 공부했던 세션과 쿠키에 대해서 생각하게 되었다
https://hahahoho5915.tistory.com/32
이 두가지를 보면 완전하게 알 수 있다
세션에 userNumber를 저장해두고 난 뒤 해당 데이터를 가져와서 글 생성 후 list로 이동할 것이다
[Controller]
@PostMapping("/register")
public String postregister(BoardVO vo, @RequestParam("userNumber") int userNumber,RedirectAttributes rttr) {
System.out.println("PostRegister Start");
rttr.addAttribute("userNumber", userNumber);
service.register(vo);
return "redirect:/board/list";
}
@GetMapping("/list")
public void getlist(@RequestParam("userNumber") int userNumber,Model model) {
List<BoardVO> list= service.list(userNumber);
model.addAttribute("list",list);
}
Controller에서 주목할 점은 userNumber를 어디서 가져왔는가 그리고
RedirectAttributes 이다
userNumber는 register 페이지에서 따로 전송하고 그 전에 로그인이 될 때 Session에 저장 되도록 UserController에 설정해 두었다
해당 데이터를 hidden 태그로 받아서 사용할 것이다
RedirectAttributes는 redirect시 데이터를 전달할 수 있게 해주는 객체이다
자세한 것은 밑의 url 블로그를 참조하자
[RedirectAttributes]
https://web-obj.tistory.com/455
그렇다면 redirect란 뭘까?
원래 Controller에서보면 String의 return 에 오는 url로 이동하게 되는데 이 때 view 페이지만을 다시 보여주는 것이지 다시 url을 부르는 개념이 아니다.
하지만 redirect를 하게 되면 다시 한번 그 url을 부르게 되면서 Controller를 부르게된다
위의 코드를 다시한 번 보자
userNumber를 가져와서 mapper를 사용하게 된다
[mapper]
<!-- 글 생성 -->
<insert id="register">
insert into test_board values(boardNumber.nextval, #{userNumber}, #{title}, #{content}, sysdate)
</insert>
<!-- BoardCheck -->
<select id="list" resultType="com.bok.domain.BoardVO">
select * from test_board where userNumber=#{userNumber} order by boardNumber desc
</select>
register mapper를 사용해서 insert 하고 난 뒤 redirect에 따라서 getlist 메소드를 실행하게 되고 RedirectAttributes의 parameter를 가져와서
List<BoardVO> list= service.list(userNumber);
를 실행시켜서 List 페이지를 가져오게 된다
하지만 여기에 하나 문제가 있다
바로 url에 파라미터 값이 나온 다는 것이다
이것을 해결해보자