게시판의 읽기 기능을 만들어보려고 한다
1) 게시판을 만들고
2) 게시판 페이지도 만들고
3) 제목을 클릭하면 내용을 볼 수 있게 한다
4) 목록을 클릭하면 이전 목록을 보여준다
5) 게시판을 들어가면 로그인을 꼭 해야하는데, 로그인을 완료하면 게시판으로 바로 올 수 있게 한다
페이지를 만들기 위한
Page 클래스
package com.holiday.hi.domain;
public class Page {
private int totalCnt; //총 게시물 갯수
private int pageSize; //한 페이지 크기
private int naviSize = 10; // 페이지 네비게이션 크기
private int totalPage; // 전체 페이지 갯수
private int page; // 현재 페이지
private int beginPage; // 네이게이션 첫번째 페이지
private int endPage; // 네비게이션 마지막 페이지
private boolean showPrev; // 이전페이지로 이동하는 링크 보여줄것?
private boolean showNext; //다음 페이지로 이동하는 링크 보여줄것?
public Page(int totalCnt, int page) {
this(totalCnt, page, 10);
}
public Page(int totalCnt, int page, int pageSize) {
this.totalCnt = totalCnt;
this.page = page;
this.pageSize = pageSize;
totalPage = (int)Math.ceil(totalCnt / (double)pageSize);
beginPage = (page-1) / naviSize * naviSize + 1;
endPage = Math.min(beginPage + naviSize -1, totalPage);
showPrev = beginPage != 1;
showNext = endPage != totalPage;
}
public void print() {
System.out.println("page = " + page);
System.out.println(showPrev ? "[PREV]" : "");
for(int i = beginPage; i <= endPage; i++) {
System.out.println(i+" ");
}
System.out.println(showNext ? " [NEXT]" : " ");
}
@Override
public String toString() {
return "Page{" +
"totalCnt=" + totalCnt +
", pageSize=" + pageSize +
", naviSize=" + naviSize +
", totalPage=" + totalPage +
", page=" + page +
", beginPage=" + beginPage +
", endPage=" + endPage +
", showPrev=" + showPrev +
", showNext=" + showNext +
'}';
}
public int getTotalCnt() {
return totalCnt;
}
public void setTotalCnt(int totalCnt) {
this.totalCnt = totalCnt;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getNaviSize() {
return naviSize;
}
public void setNaviSize(int naviSize) {
this.naviSize = naviSize;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getBeginPage() {
return beginPage;
}
public void setBeginPage(int beginPage) {
this.beginPage = beginPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public boolean isShowPrev() {
return showPrev;
}
public void setShowPrev(boolean showPrev) {
this.showPrev = showPrev;
}
public boolean isShowNext() {
return showNext;
}
public void setShowNext(boolean showNext) {
this.showNext = showNext;
}
}
BoardController ( list와 read만 )
@GetMapping("/list") //pageSize와 page는 기본이 1로
public String list(@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(defaultValue = "1") Integer page, HttpSession session,Model m, HttpServletRequest request) throws Exception {
//로그인 안하면 로그인페이지로
if(loginCheck(request)) {
return "login";
// return "redirect:/login?URL="+request.getRequestURL();
}
// 페이지마다 게시물
int offset = (page-1)*pageSize;
// 게시물들 가져오기
List<BoardDto> list = service.page(offset, pageSize);
m.addAttribute("list", list);
int totalCnt = service.getCount();
// 페이지 정보 가져오기
Page p = new Page(totalCnt,page,pageSize);
m.addAttribute("p", p);
return "boardList";
}
@GetMapping("/read")
public String read(Integer no, Integer page, Integer pageSize, Model m,HttpServletRequest request) {
//로그인 체크
if(loginCheck(request)) {
return "login";
}
String URL = "";
try {
BoardDto boardDto = service.read(no);
if(boardDto == null) {
throw new Exception("페이지를 찾을 수 없습니다");
}
m.addAttribute(boardDto);
m.addAttribute("page", page);
m.addAttribute("pageSize", pageSize);
URL =request.getHeader("referer");
m.addAttribute("URL", URL);
} catch (Exception e) {
e.printStackTrace();
return "redirect:/board/list";
}
return "board";
}
boardList.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>게시판</title>
</head>
<body>
<table border="1">
<tr>
<th class="no">번호</th>
<th class="title">제목</th>
<th class="id">아이디</th>
<th class="regdate">등록일</th>
<th class="viewcnt">조회수</th>
</tr>
<c:forEach var="boardDto" items="${list}">
<tr>
<th class="no">${boardDto.no}</th>
<th class="title"><a href="/board/read?no=${boardDto.no}&page=${p.page}&pageSize=${p.pageSize}">${boardDto.title}</a></th>
<th class="id">${boardDto.id}</th>
<th class="regdate">${boardDto.reg_date}</th>
<th class="viewcnt">${boardDto.view_cnt}</th>
</tr>
</c:forEach>
</table>
<br>
<div>
<c:if test="${p.showPrev}">
<a href="/board/list?page=${p.beginPage-1}&pageSize=${p.pageSize}"> [PREV] </a></c:if>
<c:forEach var="i" begin="${p.beginPage}" end="${p.endPage}">
<a href="/board/list?page=${i}&pageSize=${p.pageSize}">${i}</a>
</c:forEach>
<c:if test="${p.showNext}">
<a href="/board/list?page=${p.endPage+1}&pageSize=${p.pageSize}"> [NEXT] </a></c:if>
</div>
<button type="button" id = "write" onclick="location.href='/board/write'">글쓰기</button>
</body>
</html>
board.jsp
<%--
Created by IntelliJ IDEA.
User: admin
Date: 2022-11-18
Time: 오후 12:54
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>게시판</title>
</head>
<body>
<div>
<input type="text" value="${fromURL}" hidden>
<table>
<tr>
<th>제목 <input type="text" id="title" value="${boardDto.title}" readonly></th>
</tr>
<tr>
<th>ID <input type="text" id="id" value="${boardDto.id}" readonly></th>
</tr>
<tr>
<td><textarea id="content" rows="20" readonly>${boardDto.content}</textarea></td>
</tr>
<tr>이전 글</tr><tr></tr>
</table>
<button type="button" id = "list" onclick="location.href='/board/list?page=${p.page}&pageSize=${p.pageSize}'">목록</button>
</div>
</body>
</html>
읽기는 readonly로 작성이 아니라 읽을 수만 있게 만들었다
ㄷㅏ음엔 쓰기를 도전해보자!
728x90
'혼자서 개발새발' 카테고리의 다른 글
Spring) 게시판에서 글을 삭제(이승기 아님) 해보자! (0) | 2022.11.22 |
---|---|
Spring) 게시판 쓰기를 만들어보자! (0) | 2022.11.22 |
Spring) 게시판 만들기 첫 단추 - DB Table, DTO, DAO, Mapper 만들기 (0) | 2022.11.18 |
Spring) 회원가입 비밀번호 암호화를 도전해보자! (0) | 2022.11.16 |
Spring) 로그인 기능을 구현해보자! (0) | 2022.11.16 |