[MVC] 대용량레코드 만들기 --> 페이지나누기-2

🐷Jinie (juniorDeveloper)·2020년 11월 9일
1

JSP/MVC/SPRING

목록 보기
35/81

1. JSTL if문 사용하기

  • JSTL if문을 사용해서 list.jsp에 배경색을 홀수줄 짝수줄 다른색으로 넣도록 만든다.
  • JSTL은 if만 가능하고 else는 사용이 불가능하다.

<c:if test="${m.rownum % 2 == 0}"> 
// 만약 m.rownum을 2로나눈 나머지가 0이면
<c:set var="color" value="#FFD9EC" />
// 변수 color의 값을 #FFD9EC로 선언
</c:if>
<c:if test="${m.rownum % 2 == 1}"> 
// 만약 m.rownum을 2로나눈 나머지가 1이면
	<c:set var="color" value="#BCE9B7" />
// 변수 color의 값을 #BCE9B7로 선언
</c:if>

<tr bgcolor= "${color}" >
// tr의 bgcolor값에 변수 color에 받아온 값을 대입한다.

2. 이전 10개 / 다음 10개 만들기

2-1. list에 링크걸기

  • JSTL을 이용해서 받아온 idx값을 찍고 -10 /+10을 이용해서 idx값을 웹으로 다시 던지도록 링크를 걸어준다.

2-2. Controller

  • Controller에는 if문을 이용해서 idx가 null일 경우 에러가 발생하지 않도록 처리를 해준다.
    만약 null이 아닐경우 웹에서 넘겨준 idx를 받아 변수 idx에 저장하도록 한다.
  • 저장한 idx를 Model에 set해준다.
  • setAttribute(String name, Object value)
    이름이 name인 속성의 값을 value로 지정합니다.
  • 이름이 idx인 속성의 값으로 웹에서 받아온 idx를 넣어서 dispatcher로 명령한 페이지를 갈 수 있도록 설정합니다.

2-3. Dao

  • Controller에서 넘겨둔 idx값을 get해서 변수 idx에 저장한다.
  • 쿼리에 변수 idx를 이용해 쿼리문을 실행한다.

2-4. 확인



  • idx값이 걸려있는 링크를 통해 변경되는 것을 확인할 수 있다.

3. [1][2][3]... 형식으로 페이지나누기

3-1. 필요한 기본요소들 구하기

       1:페이지사이즈: <%=page_size %> &emsp;
       2:페이지List Size: <%=page_list_size %>&emsp;
       3:총레코드 수 :<%=tc %> &emsp;
       4.총페이지수: <%=pagetotal %>  <br>
       5.현재레코드: <%=now_Record %>&emsp;  
       6.현재페이지:<%=now_page %>   &emsp;
       7. 하단 가로 시작페이지: <%=start_page %> &emsp; 
       8. 하단 가로 마지막페이지: <%=end_page %> 
  • 위의 8가지를 구해야 페이지 나누기를 좀 더 수월하게 진행할 수 있다.

3-2. getter/setter 추가하기

  • DTO에서 받아올 공간을 마련해주고 getter/setter를 추가해준다.

3-3. DAO

package dao;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

import conn.DBConn;
import model.guestVo;

public class BigListDaoImpl {
	DBConn db = DBConn.getInstance();
	Connection con = null;
	String sql = null;
	PreparedStatement pstmt = null;
	PreparedStatement pstmt1 = null;
	ResultSet rs = null;
	ResultSet rs1=null;
	List<guestVo> list = null;
	String sql1 = null;
	
	public List<guestVo> selectAll(guestVo g){
		list = new ArrayList<guestVo>();
		try {
			int page_size =10;
			int page_list_size = 10;
			
			con = db.getConnect();
			sql = "select rownum, p.* from " ;
			sql = sql +	" (select rownum as rn, k.*  from ";
			sql = sql +	" (select * from guest order by custno desc)k "; 
			sql = sql +	" where rownum <= ? " ;
			sql = sql + " )p where rn >= ? ";
			
			pstmt = con.prepareStatement(sql);
			
			int now_Record = g.getNow_Record();
			int  startno = now_Record;
			int  endno = now_Record + page_size - 1 ;

			pstmt.setInt(1, endno);  
			pstmt.setInt(2, startno);
			rs = pstmt.executeQuery() ;
			
			sql1 = " select count(*) as tc from guest "; 
			pstmt1 = con.prepareStatement(sql1);
			rs1 = pstmt1.executeQuery() ;
			rs1.next();
			int tc = rs1.getInt("tc"); 
			int pagetotal = (int) (Math.ceil((double) tc / page_size)); 
			int  now_page = (int) (Math.ceil((now_Record )/page_size) + 1) ;
			int start_page =(now_page-1)/page_list_size * page_list_size + 1 ; 
			int end_page = start_page + page_list_size -1 ;
			
			System.out.println("1.["+page_size+"] 2.["+page_list_size+"] 3.["+tc+"] 4.["+pagetotal+"] 5.["+ now_Record+"] 6. ["+now_page+"] 7.["+start_page+"] 8.["+end_page+"]");
			
			while(rs.next()) {
				g = new guestVo();
				g.setRownum(rs.getInt("rownum"));
				g.setRn(rs.getInt("rn"));
				g.setCustno(rs.getInt("custno"));
				g.setCustname(rs.getString("custname"));
				g.setPhone(rs.getString("phone"));
				g.setAddress(rs.getString("address"));
				g.setJoindate(rs.getString("joindate"));			
				list.add(g);
			}		
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if( rs != null) {rs.close();}
				if( pstmt != null) {pstmt.close();}
				if( con != null) {con.close();}
				
			} catch (Exception e) {	
				e.printStackTrace();
			}
		}
		return list;		
	}
}
  • 콘솔창에서 설정한 8가지 요소들이 정상적으로 잘 작동하는지 실행해본다.

3-4. Controller

  • now_Record로 웹에서 조작할 수 있도록 변수명을 맞춰준다.
profile
ᴘᴇᴛɪᴛs ᴅᴇ́ᴠᴇʟᴏᴘᴘᴇᴜʀ. ᴘʀᴏɢʀᴀᴍᴍᴀᴛɪᴏɴ = ᴘʟᴀɪsɪʀ 💕

0개의 댓글