ListController.class
- 해당 게시판 요청을 받는 매핑 메소드.
private int tot; //전체 레코드 수
private int plist = 10; //페이지당 행 수
private int pagesu; //전체 페이지수
@GetMapping("list")
public String listProcess(Model model,@RequestParam("page")int page) {
int spage = 0;
try {
spage = page;
} catch (Exception e) {
spage = 1;
}
if(page <= 0) spage = 1;
//model.addAttribute("data",list); paging이 없는경우
//paging 처리
tot = daoImpl.totalCnt();
ArrayList<BoardDto> list = (ArrayList<BoardDto>)daoImpl.listAll();
ArrayList<BoardDto> result = getListData(list,spage);
model.addAttribute("data",result);
model.addAttribute("pagesu",getPageSu());
model.addAttribute("page",spage);
return "list";
}
public int getPageSu() { //표시될 페이지 수 얻기
pagesu = tot / plist;
if(tot % plist > 0) pagesu += 1; //나머지 레코드 계산
return pagesu;
}
spage
: 사용자가 선택한 게시글페이지. 기본값은 1페이지이고, 따로 선택한페이지가 있다면 그 값이 저장된다.
tot
: 전체 레코드수. 이는 표시될 페이지 항목수를 계산하는데에 쓰인다.
getListData(list,spage)
: 선택한 페이지에 대해서만 표시될 레코드들을 반환한다.
//(전체레코드/선택 page index)
public ArrayList<BoardDto> getListData(ArrayList<BoardDto> list,int page){
ArrayList<BoardDto> result = new ArrayList<BoardDto>();
int start = (page - 1) * plist; //0,10,20...
//페이지에 보여질 레코드.
//.size()가 10보다 클시 참이 되므로 plist가 저장.
//거짓일 경우 start(페이지 비례 10의배수)가 빠진 list.size가 저장
int size = plist <= list.size() - start? plist : list.size() - start;
//결정된 레코드만큼만 DB레코드 get
for (int i = 0; i < size; i++) {
result.add(i,list.get(start+i));
System.out.println("i:"+i+"/start+i:"+(start+i));
}
return result;
}
int start
: 몇번째 레코드부터 반환할지의 시작점을 계산한다.int size
: 페이지당 행 개수 <= 전체레코드수-시작점 을 비교했을때,list.size() - start;
을 계산하여 나머지 레코드 개수를 size으로 저장하고,result.add(i,list.get(start+i));
으로 전체 레코드의 부분 시작점부터 size까지의 내용을 꺼내 저장한다<td>제목</td>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!-- 제목이 길면 자름 -->
<c:set var="title" value="${data.title }"/>
<td>
<input type="text" name="title" style="width: 99%" value="[Re]:${fn:substring(title,0,8)}..."/>
</td>