Spring-myMelon(update,paging)

임재헌·2023년 5월 9일

Spring

목록 보기
7/9

update

Backend

CONTROLLER

list페이지에서 수정 버튼을 누르는 경우
onclick="location.href='update.do?mediagroupno=${dto.mediagroupno}'"
GET방식으로 mediagroupno를 가져오고, updateForm에 읽어온 데이터를 보여준다

@RequestMapping(value="mediagroup/update.do",method = RequestMethod.GET)
	public ModelAndView updateForm(int mediagroupno) {
		ModelAndView mav=new ModelAndView();
		mav.setViewName("mediagroup/updateForm");
		mav.addObject("dto", dao.read(mediagroupno));
		
		return mav;
	}

updateForm에서 수정 버튼을 누르는 경우
form에서 데이터를 처리하는 방식이 post
수정을 누르는 경우 update되도록 처리한다

	@RequestMapping(value="mediagroup/update.do",method = RequestMethod.POST)
	public ModelAndView updateProc(MediagroupDTO dto) {
		ModelAndView mav=new ModelAndView();
		int cnt= dao.update(dto);
		if (cnt == 0) {
			mav.setViewName("mediagroup/msgView");
			String msg1 = "<p>미디어 그룹 수정 실패</p>";
			String img="<img src='../images/pepe1.png' width='300px'>";
			String link1= "<input type='button' value='다시시도' onclick='javascript:history.back()'>";
			String link2= "<input type='button' value='그룹목록' onclick='location.href=\"list.do\"'>";
			
			mav.addObject("msg1",msg1);
			mav.addObject("img", img);
			mav.addObject("link1", link1);
			mav.addObject("link2", link2);
			
		} else {
			// 성공하면 리스트 페이지로 이동
			// redirect 명령어로 호출해서 이동
			mav.setViewName("redirect:/mediagroup/list.do");
		}
		
		return mav;
	}

DAO

GET방식

public MediagroupDTO read(int mediagroupno) {
		MediagroupDTO dto=null;
		try {
			sql=new StringBuilder();
			sql.append(" select title,mediagroupno ");
			sql.append(" from mediagroup ");
			sql.append(" where mediagroupno= " + mediagroupno);
			
			RowMapper<MediagroupDTO> rowMapper = new RowMapper<MediagroupDTO>() {
				@Override
				public MediagroupDTO mapRow(ResultSet rs, int rowNum) throws SQLException {
					// RowMapper 선택한 행을 기준으로 담아준다
					// 행의 갯수만큼 알아서 담아준다
					
					MediagroupDTO dto = new MediagroupDTO();

					// 한줄에 어떻게 담을것인지 설정
					// mediagroupno, title
					dto.setMediagroupno(rs.getInt("mediagroupno"));
					dto.setTitle(rs.getString("title"));
					return dto;
				}
			};
			
			dto=jt.queryForObject(sql.toString(), rowMapper);
			
		} catch (Exception e) {
			System.out.println("불러오기 실패"+e);
		}
		 return dto;
	}

POST방식

public int update(MediagroupDTO dto) {
	int cnt=0;
	try {
		sql=new StringBuilder();
		sql.append(" update mediagroup ");
		sql.append(" set title=? ");
		sql.append(" where mediagroupno=? ");
		
		cnt=jt.update(sql.toString(),dto.getTitle(),dto.getMediagroupno());
		
		
	} catch (Exception e) {
	System.out.println("미디어 수정 실패"+e);	
	
	}
	return cnt;
	}

view 페이지

updateForm

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>updateForm</title>
<style>
* {
	font-family: gulim;
	font-size: 25px;
}
</style>
<link href="../css/style.css" rel="stylesheet" type="text/css">
</head>
<body>

	<div class="title">미디어 그룹 수정</div>
	<form name="frm" method="post" action="update.do">
	 <input type="hidden" name="mediagroupno" value="${dto.mediagroupno}">
	<table class='table'>
	    <tr>
	        <th>미디어 그룹 제목</th>
	        <td><input type='text' name='title' size='50' value='${dto.title}'></td>
	    </tr>
	    </table>
		<div class="bottom">
		<input type="submit" value="수정">
		<input type="button" value="목록" onclick="location.href='list.do'">
		</div>
	
	</form>
</body>
</html>

paging

Backend

CONTROLLER

@RequestMapping("mediagroup/list.do")
	public ModelAndView list(HttpServletRequest req) {
        ModelAndView mav=new ModelAndView();
        mav.setViewName("mediagroup/list");
       
        int totalRowCount=dao.totalRowCount(); //총 글갯수
        
        //페이징
        int numPerPage   = 5;    // 한 페이지당 레코드 갯수
        int pagePerBlock = 10;   // 페이지 리스트
       
        String pageNum=req.getParameter("pageNum");
        if(pageNum==null){
              pageNum="1";
        }
        int currentPage=Integer.parseInt(pageNum);
        int startRow   =(currentPage-1)*numPerPage+1;
        int endRow     =currentPage*numPerPage;
       
        //페이지 수
        double totcnt = (double)totalRowCount/numPerPage;
        int totalPage = (int)Math.ceil(totcnt);
         
        double d_page = (double)currentPage/pagePerBlock;
        int Pages     = (int)Math.ceil(d_page)-1;
        int startPage = Pages*pagePerBlock;
        int endPage   = startPage+pagePerBlock+1;
        
        List list=null;     
        if(totalRowCount>0){           
              list=dao.list2(startRow, endRow);          
        } else {           
              list=Collections.EMPTY_LIST;           
        }//if end
       
        mav.addObject("pageNum",   currentPage);
        mav.addObject("count",     totalRowCount);
        mav.addObject("totalPage", totalPage);
        mav.addObject("startPage", startPage);
        mav.addObject("endPage",   endPage);
        mav.addObject("list", list);
        return mav;
    }//list() end

DAO

행의 갯수

public int totalRowCount() {
        int cnt=0;
        try {
        	sql=new StringBuilder();
        	sql.append(" SELECT COUNT(*) FROM mediagroup ");
        	
        	cnt=jt.queryForObject(sql.toString(),Integer.class);
			
		} catch (Exception e) {
			System.out.println("전체 행 갯수"+e);
		}
	return cnt;
	}

페이징

public List<MediagroupDTO> list2(int start,int end){
		List<MediagroupDTO> list=null;
		try {
			sql=new StringBuilder();
			sql.append(" select AA.* ");
			sql.append(" FROM( ");
			sql.append(" 	SELECT ROWNUM AS RNUM, BB.* ");
			sql.append("  	FROM( ");
			sql.append("  		SELECT mediagroupno, title ");
			sql.append("  		FROM mediagroup ");
			sql.append(" 			ORDER BY mediagroupno DESC ");
			sql.append("  			)BB ");
			sql.append("  				)AA ");
			sql.append(" WHERE AA.RNUM>="+ start+ "AND AA.RNUM<="+ end);
			
			RowMapper<MediagroupDTO> rowMapper = new RowMapper<MediagroupDTO>() {
				@Override
				public MediagroupDTO mapRow(ResultSet rs, int rowNum) throws SQLException {
						
					MediagroupDTO dto = new MediagroupDTO();
					dto.setMediagroupno(rs.getInt("mediagroupno"));
					dto.setTitle(rs.getString("title"));
					return dto;
				}
			};
			list=jt.query(sql.toString(), rowMapper);
			
		} catch (Exception e) {
			System.out.println("페이징 실패"+e);
		}
		
		return list;
	}
	

view 페이지

list

<!-- 페이지 리스트 -->
<c:if test="${requestScope.count>0 }">
   <c:set var="pageCount" value="${requestScope.totalPage}"/>
   <c:set var="startPage" value="${requestScope.startPage}"/>
   <c:set var="endPage"   value="${requestScope.endPage}"/>

   <div class="content">
       <c:if test="${endPage>pageCount}">
          <c:set var="endPage" value="${pageCount+1}"/>
       </c:if>
   
       <c:if test="${startPage>0}">
          <a href="./list.do?pageNum=${startPage}">[이전]</a>
       </c:if>
       
       <c:forEach var="i" begin="${startPage+1}" end="${endPage-1}">
       <c:choose>
       <c:when test="${pageNum==i}"><span style="font-weight: bold">${i}</span></c:when>
       <c:when test="${pageNum!=i}"><a href="./list.do?pageNum=${i}">[${i}]</a></c:when>
         </c:choose>
       </c:forEach>
       
   
       <c:if test="${endPage<pageCount}">
          <a href="./list.do?pageNum=${startPage+11}">[다음]</a>
       </c:if>
    </div>
</c:if>

0개의 댓글