반응형
*게시글 수정하기란?
- ‘게시글 상세 보기’+’게시글 글쓰기’ 형태
- 내가 작성했던 글을 DB에서 가져와서 글쓰기 폼에 채워서 보여주고, 내용을 수정해 전송하면 수정한 내용으로 DB 갱신
- 게시글 수정하기 처리 프로세스와 담당 모듈(파일)
1. 게시글 수정 폼 화면 작성
1) 프로젝트에서 WebContent → Board 폴더에 Edit.jsp 파일 생성
- 기존의 Write.jsp의 코드 복사-붙여넣기 후 내용 수정
// WebContent/Board/Edit.jsp
<%@ page import="model1.board.BoardDAO"%>
<%@ page import="model1.board.BoardDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="./IsLoggedIn.jsp"%> //1.
<%
//2.(아래 코드 3줄)
String num = request.getParameter("num"); // 일련번호 받기
BoardDAO dao = new BoardDAO(application); // DAO 생성
BoardDTO dto = dao.selectView(num); // 게시물 가져오기
//3.로그인 ID 얻기(아래 코드 4줄-if문까지)
String sessionId = session.getAttribute("UserId").toString();
if (!sessionId.equals(dto.getId())) { // 본인인지 확인
JSFunction.alertBack("작성자 본인만 수정할 수 있습니다.", out);
return;
}
dao.close(); // DB 연결 해제
%>
<!DOCTYPE html>
... 생략 ...
</head>
<body>
<jsp:include page="../Common/Link.jsp" />
<h2>회원제 게시판 - 수정하기(Edit)</h2>
<form name="writeFrm" method="post" action="EditProcess.jsp" //4.
onsubmit="return validateForm(this);">
<input type="hidden" name="num" value="<%= dto.getNum() %>" /> //5.
<table border="1" width="90%">
... 생략...
<td>
<input type="text" name="title" style="width: 90%;"
value="<%= dto.getTitle() %>"/> //6.
</td>
</tr>
<tr>
... 생략 ...
<textarea name="content" style="width: 90%; height: 100px;"><%= dto.getContent() %></textarea>
</td>
</tr>
... 생략 ...
</body>
</html>
- 수정하기 페이지에서도 로그인한 상태인지 확인하기 위해, IsLoggedIn.jsp 인클루드
- 로그인한 상태라면, 게시물을 가져옴
- 로그인한 상태라면, 로그인한 사용자가 게시물 작성자 본인이 맞는지 확인
→ 본인이 아니라면, 경고창을 띄우고 뒤로 이동 - 수정용 form 태그(수정 처리는 EditProcess.jsp에서 함)
- hidden 속성의 input 태그: 선택된 게시물의 일련번호를 EditProcess.jsp에 그대로 전달
- value 속성의 input 태그: 기존 게시물의 제목을 입력 폼에 미리 채워 넣음
- textarea 태그: 기존 게시물의 내용을 입력 폼에 미리 채워 넣음(여는 태그와 닫는 태그 사이의 콘텐츠 부분에 값 삽입)
→ input 태그와는 다르게 시작 태그와 종료 태그 사이에 텍스트가 들어가므로 반드시 공백 없이 작성)
2) 로그인 후, 게시글 상세 보기 페이지에서 [수정하기] 버튼 클릭해보기
(1) 로그인: 아이디 ‘hello’, 비밀번호 ‘1234’
(2) [게시판(페이징 X)] 버튼 클릭
(3) [지금은 봄입니다] 게시글 클릭
(4) [수정하기] 버튼 클릭해보기
(5) [수정하기] 버튼 정상 작동 확인
2. DAO 준비
- BoardDAO.java 파일에 코드 추가
// Java Resources/src/model1/board/BoardDAO.java
... 생략 ...
public class BoardDAO extends JDBConnect {
...생략...
//지정한 게시물 수정
public int updateEdit(BoardDTO dto) { //1.
int result = 0;
try {
//2.쿼리문 템플릿
String query = "UPDATE board SET"
+ " title=?, content=? "
+ " WHERE num=?";
//3.쿼리문 완성
psmt = con.prepareStatement(query);
psmt.setString(1, dto.getTitle());
psmt.setString(2, dto.getContent());
psmt.setString(3, dto.getNum());
//4.쿼리문 실행
result = psmt.executeUpdate();
}
catch (Exception e) {
System.out.println("게시물 수정 중 예외 발생");
e.printStackTrace();
}
return result; //5.결과 반환
}
}
- 메소드가 매개변수로 받는 DTO 객체에 수정할 내용이 담겨 있음
- UPDATE 쿼리문
- 제목, 내용, 일련번호를 인파라미터로 입력
- 쿼리 실행
- 반환하는 값: 없데이트된 행의 개수
3. 수정 처리 페이지 작성
- 프로젝트의 [WebContent] → [Board] 폴더에 EditProcess.jsp 파일 생성 및 코드입력 (DAO에 추가한 메소드 이용)
// WebContent/Board/EditProcess.jsp
<%@ page import="model1.board.BoardDAO"%>
<%@ page import="model1.board.BoardDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="./IsLoggedIn.jsp"%> //로그인한 상태인지 확인
<%
//수정 내용(폼값) 얻기
String num = request.getParameter("num");
String title = request.getParameter("title");
String content = request.getParameter("content");
//DTO 객체에 저장
BoardDTO dto = new BoardDTO();
dto.setNum(num);
dto.setTitle(title);
dto.setContent(content);
//DB에 반영[DAO 객체를 생성해 updateEdit() 메소드 호출]
BoardDAO dao = new BoardDAO(application);
int affected = dao.updateEdit(dto);
dao.close();
//수정 성공/수정 실패 처리
if (affected == 1) {
//수정 성공 시 상세 보기 페이지로 이동
response.sendRedirect("View.jsp?num=" + dto.getNum());
}
else {
//수정 실패 시 이전 페이지로 이동
JSFunction.alertBack("수정하기에 실패하였습니다", out);
}
%>
4. 동작 확인
1) 프로젝트에서 목록 보기(List.jsp) 파일을 선택한 상태로 우클릭 후, [Run As] → [Run On Server]로 실행
2) 공통 링크의 ‘로그인’ 클릭 후, 아이디에 ‘hello’ 비밀번호에 ‘1234’입력해서 로그인
3) [게시판(페이징 X)] 클릭 후, 수정하려는 게시글의 ‘제목’을 클릭해 상세 보기 페이지로 이동
4) 게시글의 제목과 내용을 적당히 수정 후 [작성 완료] 버튼 클릭
5) 게시글의 제목과 내용이 잘 수정된 것을 볼 수 있음
반응형
'자바(JAVA) > JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)' 카테고리의 다른 글
JAVA/JSP 28. 회원제 게시판에 페이징 기능 추가 - 페이징이 필요한 이유, 페이징 구현 절차 (2) | 2025.04.15 |
---|---|
JAVA/JSP 27. 모델1 방식의 회원제 게시판 만들기 - 게시글 삭제하기 (0) | 2024.01.10 |
JAVA/JSP 25. 모델1 방식의 회원제 게시판 만들기 - 게시글 상세 보기 (1) | 2024.01.01 |
JAVA/JSP 24. 모델1 방식의 회원제 게시판 만들기 - 게시판 게시글 쓰기 (1) | 2023.12.31 |
JAVA/JSP 23. 모델1 방식의 회원제 게시판 만들기 - 게시판 목록 페이지 (1) | 2023.12.30 |