- paging 처리
- rownum ? : data list 의 고유 numbering
- 페이지 처리는 이것을 이용해서 전체데이터를 가져온뒤 처리하는 것이 아니라 rownum을 활용하여 특정 범위의 데이터를 가져 오는것
- ex) page 글의 갯수가 5일때 page 1일떈 1~5번째 글 page 2일땐 6~10번째 글 이런식으로 처리
- db단 rownum between 1 and 5
- 필요 변수들
- rnum : 쿼리문에서 rownum으로 보여지는 수를 속성값으로 선언
- pageSize : 한페이장 보여질 페이지의 크기
- curPageNum : 현재 보여질 페이지 번호
- pageCnt : 전체 페이지수
- startNum : 시작번호
- endNum : 끝번호
- VO단에 변수들을 선언
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//기본 변수들
private int no;
private String title;
private String content;
private String writer;
private Date regdte;
private Date uptdte;
private int refno;
private int readcnt;
//paging 처리를 위한 변수들
private int rnum;//rownum을 속성값으로 받기 위해
private int pageSize;//한페이당 보여질 글 수
private int pageCnt;//전체 페이지수
private int tot;//전체 글 수
private int curPageNum;//현재 페이지 번호
private int startNum;//페이지 글 시작 번호
private int endNum;//페이지 글 끝 번호
| cs |
- 처리 프로세스
- 현재 번호를(curPageNum) Ctrl단에 전달하면 , 페이지크기 (pageSize)를 통해서 시작번호 (startNum)와 마지막 번호(endNum)을 처리해서 db에 전달
- 게시판
- 총건수 :
@@ 페이지크기(select) 데이터 list (시작번호 , 끝 번호 ) [ 1 ] [ 2 ] [ 3 ] 총건수 : db 검색된 (page 처리가 되지않은 ) total - 페이지 처리 변수 proc
- 총건수 : DB
- 페이지 크기 : 화면에서 선택
- 전체 페이지 크기 : 총건수 / 페이지 크기 - > 현재 page 수?
- 시작번호, 마지막 번호 : 현재 page수와 페이지 크기
- Query
- startNum과 endNum을 변수로 주어서 해당하는 페이지의 내용만 읽어오기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<select id="boardlist" resultMap="boardRst" parameterType="board">
select * from
(select rownum rnum,a.no,a.refno, a.TITLE,a.CONTENT,a.writer,
a.readcnt,a.regdte,a.uptdte from
HP_BOARD a
where 1=1
<if test="title !=null">
and title like '%'||#{title}||'%'
</if>
<if test="writer !=null">
and writer like '%'||#{writer}||'%'
</if>
start WITH refno=0
connect by PRIOR no=refno
order SIBLINGS by no desc
) where rnum between #{startNum} and #{endNum}
</select>
| cs |
- Service
- parameter로 board 객체를 받아서
- 해당객체의 pageSize , curPageNum 을 활용해 startNum과 endNum을 세팅
- 해준뒤에 해당 객체로 쿼리문 실행
- 초기페이지인 경우 : pageSize가 0인경우, curPageNum이 0인경우
- 기본 값으로 세팅
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public ArrayList<BoardVO> boardlist(BoardVO sch){
/*게시판 paging처리 로직
* 1.전체 건수 처리*/
sch.setTot(dao.getTot(sch));
//쿼리문에서 리스트의 전체사이즈를 count 해옴
// 2.한번에 보여질 데이터 건수
if(sch.getPageSize()==0){
sch.setPageSize(5);
}
//3.총 페이지 수 데이터 건수 / 페이지 크기
// 11/5==3이 나올수 있도록 올림처리
sch.setPageCnt
((int)Math.ceil(sch.getTot()/(double)sch.getPageSize()));
if(sch.getCurPageNum()==0){
sch.setCurPageNum(1);
}
//시작 번호 끝번호 처리
sch.setStartNum(sch.getCurPageNum()*sch.getPageSize()-(sch.getPageSize()-1));
sch.setEndNum(sch.getCurPageNum()*sch.getPageSize());
return dao.boardlist(sch);
};
|
- View단
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
<script type="text/javascript">
function go(obj){//페이지 이동처리
//curPageNum과 pageSize를 넘겨줌
//hidden에 숨겨져있음
$("#curPageNum").val(obj);
$size=$("select[name='pageSize']").val();
$("#pageSize").val($size);
$("form").submit();
}
$(document).ready(function(){
//해당 pageSize가 유지되도록 board 객체의 pageSize값으로
//select문을 유지
for( var i = 0 ; i < $("option").size(); i ++){
if($("option").eq(i).val() == "${board.pageSize}"){
$("option").eq(i).attr("selected","selected");
}
}
$("#reg").click(function(){
$(location).attr("href","${path}/board.do?key=goIns");
})
$("tr[name='goDetail']").click(function(){
$no=$(this).attr("class");
$(location).attr("href","${path}/board.do?key=detail1&no="+$no);
})
$("select").change(function(){//select change function
$no=$(this).val();
$(location).attr("href","${path}/board.do?key=sch&pageSize="+$no);
})
})
</script>
</head>
<body>
<center>
<h1>게시판에 어서오세요</h1>
<table style="board-color:white;" id="topTab">
<tr>
<td align="left">글 갯수 : ${board.tot}</td>
<td align="left">페이지당 글 갯수 : ${board.pageSize}</td>
<td align="right">
<select name="pageSize">
<option value="1">1</option>
<option value="2">2</option>
<option value="5">5</option>
<option value="10">10</option>
</select>
</td>
</tr>
</table>
<table id="mainTab">
<tr>
<td>no</td>
<td>title</td>
<td>content</td>
<td>writer</td>
<td>regdte</td>
<td>uptdte</td>
<td>refno</td>
<td>readcnt</td>
</tr>
<c:forEach var = "list" items="${alllist}">
<tr name="goDetail" class="${list.no}">
<td>${list.rnum}</td>
<td>${list.title}</td>
<td>${list.content}</td>
<td>${list.writer}</td>
<td>${list.regdte}</td>
<td>${list.uptdte}</td>
<td>${list.refno}</td>
<td>${list.readcnt}</td>
</tr>
</c:forEach>
</table>
<form method="post" action="${path}/board.do?key=sch">
<c:forEach var="pnum" begin="1" end="${board.pageCnt }">
<a href="javascript:go(${pnum });">
<c:choose>
<c:when test="${board.curPageNum == pnum }">
<b style="font-size: 22pt">[${pnum}]</b>
</c:when>
<c:otherwise>
[${pnum}]
</c:otherwise>
</c:choose>
</a>
</c:forEach>
<input type="hidden" id="pageSize" name="pageSize"/>
<input type="hidden" id="curPageNum" name="curPageNum"/>
</form>
<table>
| cs |
- Ctrl
- 간단함 별거없음..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@RequestMapping(params="key=list")//초기페이지
public String boardList(@ModelAttribute("board")BoardVO sch,Model d){
//sch.setPageSize(no);
d.addAttribute("alllist", service.boardlist(sch));
return "board/a01_List";
}
@RequestMapping(params="key=sch")//그어떤 페이지이동이나 리스트변경이 있을시..
public String schBoard(@ModelAttribute("board")BoardVO sch,Model d){
d.addAttribute("alllist", service.boardlist(sch));
return "board/a01_List";
}
| cs |
s
댓글 없음:
댓글 쓰기