글 수정
수정 페이지로 이동시키는 링크를 설정한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!-- attribute : vo -->
<title>${ vo.subject }</title>
<div class="container">
<h1>글 내용 보기</h1>
<ul>
<li>글 번호</li>
<li>${ vo.postno }</li>
<li>작성자</li>
<li>${ vo.username }</li>
<li>등록일</li>
<li>${ vo.regdate }</li>
<li>조회수</li>
<li>${ vo.hitcount }</li>
<li>제목</li>
<li>${ vo.subject }</li>
<li>내용</li>
<li>${ vo.content }</li>
</ul>
<div>
<a href="/myapp/board/boardEdit?postno=${ vo.postno }">수정</a>
<a href="#">삭제</a>
</div>
</div>
컨트롤러 모델&뷰
컨트롤러에 service.boardView()를 이용해서 해당 글에 대한 정보를 가져온다.
// 글 수정
@RequestMapping("/board/boardEdit")
public ModelAndView boardEdit(int postno) {
ModelAndView mav = new ModelAndView();
mav.addObject("vo", service.boardView(postno));
mav.setViewName("board/boardEdit");
return mav;
}
뷰페이지
boardEdit.jsp는 boardPost.jsp를 가져와서 기존 내용만 넣어주면 된다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!-- attribute : vo -->
<script>
function formCheck(){
if(document.getElementById("subject").value == ""){
alert("제목을 입력하세요.");
return false;
}
if(document.getElementById("content").value == ""){
alert("내용을 입력하세요.");
return false;
}
return true;
}
</script>
<title>글 수정</title>
<div class="container">
<h1>글 수정 form</h1>
<form method="post" action="/myapp/board/boardEditOk" onsubmit="return formCheck()">
<input type="hidden" name="postno" value="${ vo.postno }">
<ul>
<li>제목</li>
<li><input type="text" name="subject" id="subject" size="50" value="${ vo.subject }"></li>
<li>
<textarea name="content" id="content" rows="20" cols="100">${ vo.content }</textarea>
</li>
<li><input type="submit" value="등록"></li>
</ul>
</form>
</div>
컨트롤러에서 boardEditOk를 매핑해서 수정된 글을 고치자.
이번엔 컨트롤러에서 미리 service와 뷰페이지 이름까지 다 정한 후 Service, SQL문으로 넘어가자.
컨트롤러 매핑
// 글 수정 저장
@PostMapping("/board/boardEditOk")
public ModelAndView boardEdit(BoardVO vo, HttpSession session) {
ModelAndView mav = new ModelAndView();
// 로그인한 사용자가 자기글만 수정할 수 있도록 한다
vo.setUsername((String)session.getAttribute("logUsername"));
mav.addObject("result", service.boardEditOk(vo));
mav.addObject("postno", vo.getPostno());
mav.setViewName("board/boardEditOk");
return mav;
}
Service
package com.poby.myapp.service;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import com.poby.myapp.dao.BoardDAO;
import com.poby.myapp.vo.BoardVO;
import com.poby.myapp.vo.PageVO;
@Service
public class BoardServiceImpl implements BoardService {
@Inject
BoardDAO dao;
@Override
public int boardPostOk(BoardVO vo) {
return dao.boardPostOk(vo);
}
@Override
public List<BoardVO> boardList(PageVO pvo) {
return dao.boardList(pvo);
}
@Override
public int totalData(PageVO pvo) {
return dao.totalData(pvo);
}
@Override
public BoardVO boardView(int postno) {
return dao.boardView(postno);
}
@Override
public int boardEditOk(BoardVO vo) {
return dao.boardEditOk(vo);
}
}
쿼리문
<update id="boardEditOk">
UPDATE board_tbl SET subject=#{subject}, content=#{content}
WHERE postno=${postno} AND username=#{username}
</update>
쿼리문의 결과(성공:1, 실패:0)를 boardEditOk.jsp로 넘겨주어 실행결과에 따라서 뒤로가기 혹은 수정한 글 보기 페이지로 이동시키자.
뷰페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!-- attribute : result -->
<c:if test="${ result==0 }">
<script>
alert("수정 실패.");
history.back();
</script>
</c:if>
<c:if test="${ result>0 }">
<script>
location.href = "/myapp/board/boardList?postno=${postno}";
</script>
</c:if>
※ 500에러 : 로그인이 안 된 상태에서 수정 시도
아이디 세션값이 null이기 때문에 컨트롤러에서 vo.setUsername에서 에서가 발생한다.
'Spring' 카테고리의 다른 글
12.15.(목) Spring Framework(27): 자료실 기능(1) (0) | 2022.12.17 |
---|---|
12.15.(목) Spring Framework(26): 게시판 기능(11) (0) | 2022.12.17 |
12.15.(목) Spring Framework(24): 게시판 기능(9) (0) | 2022.12.17 |
12.15.(목) Spring Framework(23): 게시판 기능(8) (0) | 2022.12.17 |
12.15.(목) Spring Framework(22): 게시판 기능(7) (0) | 2022.12.17 |