[Edit]
EditController.java 에서 수정으로 이동해서 뿌려주는 것과 수정 다 한 후 이동을 한꺼번에 다 처리할 것임
(저번에 게시판에서는 edit랑 editOK랑 나누어서 처리했었는데 그걸 합칠거)
근데 수정폼을 이동하는 요청과 수정처리하는 요청이 모두 post요청임..
두개를 구분하기 위해서 전달된 파라미터로 구분하거나 이전 url로 구분하여 분기 처리 해야 한다.

우선 Edit.jsp생성
write.jsp를 복붙해 와서
<input type="hidden" name="no" value="${record.no }"/>
<input type="hidden" name="nowPage" value="${param.nowPage}"/>
<input type="hidden" name="originalFileName" value="${record.attachFile }"/>
히든타입으로 넘겨주고
${}도 변경하고
경로도 변경해준다
action="<c:url value="/DataRoom/Edit.kosmo"/>"
그러면 본격적으로
EditController.java 생성

@WebServlet("/DataRoom/Edit.kosmo")
public class EditController extends HttpServlet{
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		/*
	    모두(수정폼으로 이동 요청과 수정처리 요청)post요청임
		수정폼으로 이동 및 수정처리는
		전달 된 파라미터로 구분한거나 이전url로 구분하여 분기처리
		 */
		String mode=req.getParameter("mode");
		//System.out.println("mode:"+mode+",이전url"+req.getHeader("refere"));
		if(mode != null) { //수정 폼으로 이동
			String no = req.getParameter("no");
			//모델 호출 및 결과값 받기
			DataRoomDAO dao =new DataRoomDAO(getServletContext());
			DataRoomDTO record = dao.selectOne(no);
			dao.close();
			////리퀘스트 영역에 저장
			req.setAttribute("record", record);
			req.getRequestDispatcher("/dataroom14/Edit.jsp").forward(req, resp);
			return;			
		}
		
		//수정처리
		////DB입력 성공시에는 1, 실패시 0, 파일용량 초과시는 -1
		int updateflag;
		try {
			//서버의 물리적 경로 얻기
			String saveDirectory=req.getServletContext().getRealPath("/upload");
			//기타 파라미터 받기
			String name = req.getParameter("name");
			String title= req.getParameter("title");
			String password= req.getParameter("password");
			String content= req.getParameter("content");
			String no = req.getParameter("no"); 
			String originalFileName= req.getParameter("originalFileName");
			
			//업로드된 파일 정보를 얻기위한 part객체 생성
			Collection<Part> parts=req.getParts();//요 메소드 호출 시 용량 초과하면 에러		
			//파일 업로드 로직 호출
			String attatchFile=FileUtils.upload(parts, saveDirectory);
			String attatchFileTemp = attatchFile;  //temp안쓰면 파일 교체 없어도 기존파일이 삭제된다.
			if(attatchFile == null) { //파일 첨부하지 않았을 때(수정 시 파일교체 안함) 
				attatchFile = originalFileName;  
			}	
			
			//수정 처리로직(데이터베이스 CRUD관련 작업 호출)
			DataRoomDAO dao = new DataRoomDAO(getServletContext());
			DataRoomDTO dto = new DataRoomDTO();
			dto.setAttachFile(attatchFile);
			dto.setContent(content);
			dto.setName(name);
			dto.setPassword(password);
			dto.setTitle(title);
			dto.setNo(no);
			updateflag=dao.update(dto);
			////DB업데이트 성공 하고 파일교체시에만 파일 삭제!! && attacthFileTemp != null 꼭 넣어줘야 한다!
			if(updateflag == 1 && attatchFileTemp != null) { // 수정 성공 시 기존에업로드 된 파일 삭제로직 호출
				//파일 변경 시 기존파일 삭제 로직 호출
				FileUtils.deletes(originalFileName, saveDirectory);
			}
		}
		catch (Exception e) { //파일 용량 초과시
			updateflag=-1;
		}
		//수정시 성공여부
		req.setAttribute("SUCCFAIL", updateflag);
		//컨트롤러 구분용 -입력: ins,수정edt, 삭제del
		req.setAttribute("WHERE","EDT");	
		///포워드
		req.getRequestDispatcher("/dataroom14/Message.jsp").forward(req, resp);
	}

}


message에서 이동하는 경로도바꿔야 함!!

[페이징적용하기] ---> 이동목록을 따라가서 처리하자
DAO에 SLELECTLIST변경
페이징 적용 구간쿼리
String sql="SELECT * FROM (SELECT t.*,ROWNUM R FROM (SELECT * FROM dataroom ORDER BY no DESC) T)WHERE R BETWEEN ? AND ?";
변경
psmt.setString(1,map.get("Start").toString());
psmt.setString(2,map.get("end").toString());
이거도 추가해주고

getTotalRecordCount 생성

@Override
public int getTotalRecordCount(Map map) {
    int totalCount = 0;
    try {
        psmt=conn.prepareStatement("SELECT COUNT(*) FROM dataroom");
        rs=psmt.executeQuery();
        rs.next();
        totalCount =rs.getInt(1);
    }
    catch(SQLException e) {e.printStackTrace();}
    return totalCount;
}///////////


list컨트롤러에 페이징로직 추가
list에 nowpage
<td class="text-left"><a href="<c:url value="/DataRoom/View.kosmo?no=${record.no}&nowPage="/><c:out value="${param.nowPage }" default ="1"/>">${record.title}</a></td>

veiw에 nowpage
<!-- 현재 페이지 번호 우선 걍 둬-->
<input type="hidden" name="nowPage" value="${param.nowPage}"/>

여기 두개에만 param.nowpage로 넘기면 됨
컨트롤러는 포워드되서 알아서 넘겨짐
또 수정할 때는
edit.jsp
<input type="hidden" name="nowPage" value="${param.nowPage}"/>
message.jsp
value="/DataRoom/View.kosmo?no=${param.no}&nowPage=${param.nowPage}"
요 두개만 nowpage 처리!!
하면 됨!

ListController에도 페이징 관련 처리!!

@WebServlet("/DataRoom/List.kosmo")
public class ListController extends HttpServlet {
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//가.사용자 요청을 받는다.
		//나.요청을 분석한다.
		//다.모델에서 필요한 로직 호출해서 결과값이 있으면 받기
		Map map = new HashMap<>();  //빈 맵 만들		
		DataRoomDAO dao = new DataRoomDAO(req.getServletContext());
		//페이징과 관련된 로직 호출
		PagingUtil.setMapForPaging(map, dao, req);
	    int totalRecordCount=Integer.parseInt(map.get("totalRecordCount").toString());
	    int blockPage=Integer.parseInt(map.get("blockPage").toString());
	    int pageSize=Integer.parseInt(map.get("pageSize").toString());
	    int totalPage=Integer.parseInt(map.get("totalPage").toString());
	    int nowPage=Integer.parseInt(map.get("nowPage").toString()); 
		
	    String pagingString=PagingUtil.pagingBootStrapStyle(totalRecordCount, pageSize, blockPage, nowPage,req.getContextPath()+"/DataRoom/List.kosmo?");
		
	    List<DataRoomDTO> records = dao.selectList(map);
		//라. 결과값 있으면 리퀘스트에 저장
		req.setAttribute("records", records);
		req.setAttribute("pagingString", pagingString);
		//마. 결과값을 뿌려줄 jsp페이지인 뷰 를 선택 후 포워딩 (이게 서블릿이 하는 일 !!!!!!)
		//뷰선택
		RequestDispatcher dispatcher = req.getRequestDispatcher("/dataroom14/List.jsp");
		//포워딩
		dispatcher.forward(req, resp);
	}
}



아!!! update도 정의가 안되어 있었으!!!

@Override
public int update(DataRoomDTO dto) {
    int affected = 0;
    String sql ="UPDATE dataroom SET name=?,password=?,title=?,content=?,attachFile=? WHERE no=?";
    try{
        psmt = conn.prepareStatement(sql);
        psmt.setString(1, dto.getName());
        psmt.setString(2, dto.getPassword());
        psmt.setString(3, dto.getTitle());
        psmt.setString(4, dto.getContent());
        psmt.setString(5, dto.getAttachFile());
        psmt.setString(6, dto.getNo());
        affected = psmt.executeUpdate();
    }
    catch(SQLException e){e.printStackTrace();}
    return affected;
}///////////

경로 넣을 때 / 빠진거 없는지 꼭 확인 !!
파람으로 넘어갈 때 페이징 잘 되어있는지 주소창 잘 보고
번호 안넘어 간다 싶으면 파라미터명 틀리지 않았는지
${}이랑 name속성도 꼭 확인 !!!!

+ Recent posts