Vienna
깜짝과제3) 웹페이지 페이징 처리 본문
◇ 문제
웹사이트에서 대부분의 게시판(공지사항등)들은 콘텐츠를 모두 보여줄 수 없기 때문에 페이징 처리를 합니다. (아래 이미지 참조) 예를 들어, 전체 글의 개수가 127개라고 하고 한 페이지에서 보여지는 글의 목록이 10개라고 할때 페이지 블럭의 개수도 10개가 보여진다고 할때 전체 페이지의 모양은 아래와 같습니다.
이러한 페이지네비게이션의 html 코드를 출력하는 페이지네비게이션을 구현해보세요.
초기에 결정되는 값들은
- 전체 개시글 수
- 한 페이지당 보여지는 글의 수
- 페이지네비게이션에서 보여주는 블럭수
- 현재 페이지번호
현재 페이지번호에 해당하는 번호는 다른 페이지번호와 구분되어야 합니다.
import java.io.*;
public class Main {
static final String newLine = "\r\n";
static final String open = "<a href='#'>";
static final String close = "</a>";
public static void main(String[] args) throws IOException {
long totalCount = 127;
long pageIndex = -3;
Pager pager =new Pager(totalCount);
System.out.println(pager.html(pageIndex));
}
static class Pager{
private final int countPerPage = 10;
private final int pagePerOnce = 10;
private long totalCount;
public Pager(long totalCount){
this.totalCount = totalCount;
}
public String html(long pageIndex){
StringBuilder sb =new StringBuilder();
// 총 페이지 수
long totalPage = totalCount/countPerPage+(totalCount%countPerPage == 0 ? 0 : 1);
if(pageIndex<=0){
pageIndex = 1;
}
else if(pageIndex>totalPage)
pageIndex = totalPage;
final long start = pageIndex / pagePerOnce*pagePerOnce+1;
final long end = Math.min(start+pagePerOnce -1, totalPage);
sb.append(open).append("[").append("처음").append("]").append(close);
sb.append(newLine).append(open).append("[").append("이전").append("]").append(close);
sb.append(newLine);
for(long i = start; i<=end; i++){
sb.append(newLine).append(open);
if(i == pageIndex){
sb.insert(sb.length()-1, " class='on'");
}
sb.append(i).append(close);
}
sb.append(newLine);
sb.append(newLine).append(open).append("[").append("다음").append("]").append(close);
sb.append(newLine).append(open).append("[").append("마지막").append("]").append(close);
return sb.toString();
}
}
}
'그외' 카테고리의 다른 글
알고리즘 복습) 버블 정렬, 삽입 정렬, 선택 정렬 (1) | 2023.06.13 |
---|---|
깜짝과제2) 거리가 가장 가까운 좌표값 찾는 프로그램 작성하기 (0) | 2023.06.06 |
깜짝과제1) 자바로 hmtl 파일 생성 (0) | 2023.06.06 |
Comments