이전 글)
[스프링 프로젝트] 마이페이지 - 내 게시글 보기 view
이전 글) 마이페이지에서는 내가 쓴 게시글과 댓글을 확인할 수 있다. 페이지 구성은 이렇게 되어 있다. 게시글의 경우, 한번에 10개의 게시글을 볼 수 있게 설정해 두었고, 게시글이 10개가 넘어
dongcu.tistory.com

페이지 상단을 보면 사용자의 닉네임과 함께 해당 게시판에 몇 개의 글과 댓글을 썼는지 확인할 수 있다.
우선 이 값들을 구하는 쿼리문과 DAO, Service부터 적어두고 Controller에서의 사용은 마지막에 함께 적어두려 한다.
먼저 해당 쿼리문이다.

<!-- 마이페이지(자게) 게시글 총 개수 -->
<select id="getMyFreeCnt" resultType="_int">
select count(b_num) from
f_board where b_writer = #{b_writer}
</select>
<!-- 마이페이지(자게) 댓글 총 개수 -->
<select id="getMyFreeRepCnt" resultType="_int">
select count(c_num) from
f_comment where c_writer = #{c_writer}
</select>
ProfileDAO로 이동해서 다음의 메소드를 ProfileDAO와 ProfileDAOImpl에 차례로 작성한다.

// 마이페이지(자게) 게시글 총 개수
public int getMyFreeCnt(String b_writer) throws Exception;
// 마이페이지(자게) 댓글 총 개수
public int getMyFreeRepCnt(String c_writer) throws Exception;

// 마이페이지(자게) 게시글 총 개수
@Override
public int getMyFreeCnt(String b_writer) throws Exception {
return sql.selectOne(namespace + ".getMyFreeCnt", b_writer);
}
// 마이페이지(자게) 댓글 총 개수
@Override
public int getMyFreeRepCnt(String c_writer) throws Exception {
return sql.selectOne(namespace + ".getMyFreeRepCnt", c_writer);
}
다음은 ProfileService이다.
마찬가지로 다음의 메소드를 ProfileService와 ProfileServiceImpl에 적어준다.

// 마이페이지(자게) 게시글 총 개수
public int getMyFreeCnt(String b_writer) throws Exception;
// 마이페이지(자게) 댓글 총 개수
public int getMyFreeRepCnt(String c_writer) throws Exception;

// 마이페이지(자게) 게시글 총 개수
@Override
public int getMyFreeCnt(String b_writer) throws Exception {
return pdao.getMyFreeCnt(b_writer);
}
// 마이페이지(자게) 댓글 총 개수
@Override
public int getMyFreeRepCnt(String c_writer) throws Exception {
return pdao.getMyFreeRepCnt(c_writer);
}
게시글의 총 개수를 구하는 것은 게시글 목록 페이징에도 사용된다.
이제 한 페이지에 출력할 게시물 개수를 나타내는 postNum과 출력할 게시물 시작번호를 나타내는 displayPost를 활용해서 게시글 목록을 출력하는 메소드를 생성하면 된다.
우선 쿼리문부터 작성한다.

<!-- 마이페이지(자게) 게시글 목록 -->
<select id="getMyFreeList" resultType="com.gym.domain.FreeBoardVO">
select *
from f_board
where b_writer = #{b_writer}
order by b_num desc
limit #{displayPost}, #{postNum}
</select>
ProfileDAO와 ProfileDAOImpl로 이동해서 메소드를 작성한다.

// 마이페이지(자게) 게시글 목록
public List<FreeBoardVO> getMyFreeList(String b_writer, int displayPost, int postNum) throws Exception;

// 마이페이지(자게) 게시글 목록
@Override
public List<FreeBoardVO> getMyFreeList(String b_writer, int displayPost, int postNum) throws Exception {
HashMap<String, Object> data = new HashMap<String, Object>();
data.put("b_writer", b_writer);
data.put("displayPost", displayPost);
data.put("postNum", postNum);
return sql.selectList(namespace + ".getMyFreeList", data);
}
마찬가지로 ProfileService와 ProfileServiceImpl에 메소드들을 작성해 준다.

// 마이페이지(자게) 게시글 목록
public List<FreeBoardVO> getMyFreeList(String b_writer, int displayPost, int postNum) throws Exception;

// 마이페이지(자게) 게시글 목록
@Override
public List<FreeBoardVO> getMyFreeList(String b_writer, int displayPost, int postNum) throws Exception {
return pdao.getMyFreeList(b_writer, displayPost, postNum);
}
메소드 작성이 모두 마무리 됐으면 ProfileController로 이동한다.
ProfileController에서 지금까지 작성한 메소드들을 모두 사용한다.

// 마이페이지(자게) 게시글 목록, 개수
@RequestMapping(value = "/my_free", method = RequestMethod.GET)
public void my_free(int num, Model model, HttpServletRequest req) throws Exception {
String userid = ((UserVO) req.getSession().getAttribute("loginUser")).getUserid();
Page page = new Page();
ReplyPage replypage = new ReplyPage();
page.setNum(num);
page.setCount(profileservice.getMyFreeCnt(userid));
replypage.setCount(profileservice.getMyFreeRepCnt(userid));
List<FreeBoardVO> list = null;
list = profileservice.getMyFreeList(userid, page.getDisplayPost(), page.getPostNum());
model.addAttribute("page", page);
model.addAttribute("replypage", replypage);
model.addAttribute("select", num);
model.addAttribute("list", list);
}
일반 게시글 목록과 다르게 마이 페이지의 게시글 목록은 작성자 아이디가 고정되어 있다.
현재 사용자의 아이디는 세션에 저장되어 있기 때문에 세션에서 아이디만 추출하는 과정이 필요하다.
String 타입의 userid 변수에 저장하는 코드가 그 과정이다.
게시물의 총 개수, 댓글의 총 개수를 구할 때 사용하는 Page와 ReplyPage를 선언한다.
현재 보고 있는 페이지를 의미하는 num과 Service에서 선언한 게시물 및 댓글의 총 개수를 구하는 메소드를 사용한 값을 page와 replypage에 각각 세팅한다.
FreeBoardVO 타입의 List로 선언된 list라는 이름을 가진 변수에 Service에서 선언한 게시글 목록을 불러오는 메소드를 사용한 결과를 저장한다.
그리고 각각의 값들을 model을 통해 view에서 사용할 수 있게 설정해 준다.

사용자의 닉네임은 세션에 저장된 값에서 불러온다.
게시글과 댓글의 총 개수는 model에 세팅한 page와 replypage에서 각각 불러온다.

model에서 list로 저장한 값을 view에서는 freelist로 사용한다.
freelist에 ' . '을 찍어서 게시글 번호, 제목 등 출력하고자 하는 바를 출력할 수 있다.
수정과 삭제 부분에 hidden 타입으로 select를 저장한 것은 해당 기능을 수행한 이후 현재 보고 있던 페이지로 그대로 돌아오기 위함이다.
여기서는 생략됐지만 밑에 있는 글쓰기와 전체 삭제에도 select가 있는데 위와 같은 이유이다.

페이지 처리는 일반 게시판과 동일하다.
한 페이지에 10개씩 출력해주고, 5 페이지를 하나의 묶음으로 세팅한다.
이전 페이지 묶음이 존재하면(현재 보고 있는 페이지가 6 페이지 이상이면) [이전]을 출력한다.
첫 페이지부터 마지막 페이지까지 반복하는 for문을 통해 페이지 이동 및 현재 보고 있는 페이지를 표시할 수 있다.
다음 페이지 묶음이 존재하면(총 페이지가 6, 11 페이지 등 이상이면) [다음]을 출력한다.
다음 글)
'SpringFramework-OTOlympic' 카테고리의 다른 글
| [스프링 프로젝트] 마이페이지 - 내 게시글 보기 view (0) | 2023.03.21 |
|---|---|
| [스프링 프로젝트] 게시판 - 댓글 삭제 (0) | 2023.03.21 |
| [스프링 프로젝트] 게시판 - 댓글 수정 (0) | 2023.03.21 |
| [스프링 프로젝트] 게시판 - 댓글 작성 (0) | 2023.03.21 |
| [스프링 프로젝트] 게시판 - 댓글 조회 + 페이징 (0) | 2023.03.21 |