[게시판 만들기]6.글 수정

JINI·2022년 11월 30일
0
post-thumbnail

🧩글 수정

수정하기는 해당 유저에 대한 정보를 그대로 가지고 온다.
이전(목록보기)과 수정하기 버튼이 있고 수정 버튼 클릭 시 수정페이지로 이동되며 제목과 내용을 수정할 수 있다.


✂️수정 전

✂️수정 후


🧩1.수정 페이지 연결

📕Controller

@GetMapping("modify_form")
	public String modify_form(@RequestParam int writeNum, Model model) {
		bs.getData(writeNum, model);
		return "board/modify_form";
}
  • 수정하기 버튼을 클릭하면 수정 페이지로 연결된다.
  • 해당 글 번호를 가지고 오고 Model을 통해 service로 데이터를 전달한다.

📕Service/serviceImpl

  • service
public void getData(int writeNum, Model model);
  • serviceImpl
	public void getData(int writeNum, Model model) {
		model.addAttribute("detailWriteData", mapper.writeView(writeNum));
	}
  • 수정을 위한 데이터를 불러오고, 수정할 데이터는 mapper로 보낸다.
  • 글작성과 같은 코드를 쓰지만 나중에 조회수 증가 코드를 추가하기 때문에 각각 적기로했다.

📕mapper.java

  • service와 같은 코드를 쓰기 때문에 생략했다.

🎨수정 페이지 jsp

<form action="${contextPath}/board/modify" method="post" >
	<div class="form-group">
	<label>글번호</label> 
    <input class="form-control" name="writeNum" value="${detailWriteData.writeNum  }" readonly>
	</div>
	<div class="form-group">
	<label>작성자</label> 
    <input class="form-control" name="writer" value="${detailWriteData.writer  }" readonly>
	</div>
	<div class="form-group">
	<label>제목</label> 
    <input class="form-control" name="title" value="${detailWriteData.title }" >
	</div>
	<div class="form-group">
	<label>내용</label>
	<textarea class="form-control" rows="3" name="content">${detailWriteData.content }</textarea>
	</div>
	</div>
	
	<c:if test="${successUser == detailWriteData.writer  }">
		<input type="submit" class="btn btn-default" value="수정하기">
		<input type="submit" class="btn btn-default" value="삭제하기">
		<input type="button" class="btn btn-default" value="목록보기"
								onClick="location.href='${contextPath}/board/list'">
	</c:if>
</form>
  • 해당 폼은 post방식으로 modify 컨트롤러로 연결한다.
  • 넘긴 데이터를 db에서 글 번호, 작성자는 그대로 가져오고 제목과 내용은 수정할 수 있도록 한다.
  • 본인 작성글에서만 수정,삭제하기 버튼 뜨고 본인 글이 아니라면 댓글작성만 뜨도록한다.

🧩2.수정하기(수정한 내용으로 저장)

📕Controller

@PostMapping("modify")
public void modify(MultipartHttpServletRequest multi,HttpServletResponse response,
	      		  HttpServletRequest request) throws IOException {
	 String message = bs.modify(multi, request);
	 PrintWriter out=null;
	 response.setContentType("text/html; charset=utf-8");
	 out = response.getWriter();
	 out.println(message);
}
  • 수정한 글을 저장하기 위해 @PostMapping을 쓴다.
  • service로 사용자 정보와 요청을 보내고 메시지로 응답을 해준다.

📕Service/serviceImpl

public String modify(MultipartHttpServletRequest multi, HttpServletRequest request);
public String modify(MultipartHttpServletRequest multi, HttpServletRequest request) {
		boardDTO dto = new boardDTO();
		dto.setWriteNum( Integer.parseInt(multi.getParameter("writeNum")) ); 
		dto.setTitle(multi.getParameter("title"));
		dto.setContent(multi.getParameter("content"));
		int result = mapper.modify(dto);
		String msg, url;
			if(result == 1) {
				msg = "수정되었습니다";
				url = "/board/list";
			}else {
				msg = "수정 중 문제가 발생하였습니다";
				url = "/board/modify_form";
			}
  		}
       
  • dto를 불러오고 dto에 새로운 값들을 저장하고 그 값들을 multi에서 가져온다.
  • 글 번호는 문자열로 들어오는데 num은 int라 int형으로 형변환을 해주었다.
  • mapper로 보낼 값들을 변수 result에 넣고 result가 1이면 성공적으로 수정되었다는 메시지를 출력하고 게시판 목록 페이지로 이동하고 1이 아니면 오류 발생 메시지를 출력하고 페이지가 넘어가지 않는다.

📕mapper.java

public int modify(boardDTO dto);

📕mapper.xml

	<update id="modify">
		update talk_board set title=#{title},content=#{content} where write_num=#{writeNum}
	</update>
  • 수정 쿼리문은update를 사용한다.
  • 글 번호를 기준으로 제목과 내용을 새로운 내용으로 수정한다.

profile
꾸준히 성장하는 개발자

0개의 댓글