이어서 게시글 조회 및 수정 기능을 추가해 본다.
Post.jsp 라는 페이지에서 조회와 수정을 두개 다 할수있게 만들었기에 묶었음.
이전과 동일하게 먼저 Controller 에 Content GetMapping 시켜준다.
@GetMapping("/Content")
public ModelAndView viewPost(HttpServletRequest request) {
String num = request.getParameter("num");
Post post = postService.getPost(num);
mav.setViewName("Post");
mav.addObject("post", post);
mav.addObject("status", "0");
return mav;
}
이어서 Service 에 등록
public Post getPost(String num) {
return postDao.selectPost(num);
}
dao 에 등록해서
public Post selectPost(String num) {
return sqlSession.selectOne("PostMapper.selectPost", num);
}
PostMapper.selectPost 쿼리문을 작성해준다.
<select id="selectPost" resultType="com.example.post.model.Post">
SELECT * FROM TEST1 WHERE NUM = #{num}
</select>
resultType 으로 Post 를 맞춰준다.. 반대로 넣을땐 ParameterType 임(글쓰기 항목 확인)
그럼 이렇게 가져온 내용을 그려줄 jsp 를 작성한다.
Content Controller 를 보면 Post.jsp 를 설정해둔것을 확인할 수있다.
이름을 Post.jsp 로 작성하여 WEB-INF/jsp 아래 넣는다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${post.title}</title>
</head>
<body>
<c:choose>
<c:when test="${status == 1}">
<form action="${pageContext.request.contextPath}/Modify?num=${post.num}" method="post" accept-charset="utf-8" enctype="multipart/form-data">
<label for="title">글번호:</label>
<input type="text" id="num" name="num" value="${post.num}" readonly><br><br>
<label for="title">제목:</label>
<input type="text" id="title" name="title" value="${post.title}"><br><br>
<label for="author">작성자:</label>
<input type="text" id="author" name="author" value="${post.author}"><br><br>
<label for="contents">내용:</label><br>
<textarea id="contents" name="contents">${post.contents}</textarea><br><br>
<input type="submit" value="수정">
</form>
</c:when>
<c:when test="${status == 0}">
<p>게시글 보기</p>
<label for="title">글번호:</label>
<input type="text" id="title" name="title" value="${post.num}" readonly><br><br>
<label for="title">제목:</label>
<input type="text" id="title" name="title" value="${post.title}" readonly><br><br>
<label for="author">작성자:</label>
<input type="text" id="author" name="author" value="${post.author}" readonly><br><br>
<label for="contents">내용:</label><br>
<textarea id="contents" name="content" readonly>${post.contents}</textarea><br>
<br>
<a href="${pageContext.request.contextPath}/Modify?num=${post.num}">수정</a>
</c:when>
</c:choose>
<a href="${pageContext.request.contextPath}/">글 목록</a>
<a href="${pageContext.request.contextPath}/Delete?num=${post.num}">삭제</a>
<br><br>
</body>
</html>
status 코드를 넣어서 0일때는 글 조회, 1일때는 글 수정을 할 수 있게끔 만들었다.]
그외에 수정, 삭제, 글목록 a 링크를 통해 이동할 수 있다.
그럼 이어서 modify 수정버튼을 눌렀을 때 작동할 수 있는 modify 기능을 만들어 본다.
이전 Write 와 동일하게 Modify Get Mapping 으로 접근, PostMapping 접근 시 두가지로 만들었다.
Get Mapping 에는 Post.jsp 로 이동시키지만, status 1 을 받아서 넘긴다.
이때 Post 내용(게시글 내용) 도 같이 넘기는데 수정할 때 사용하기 위함이다.
JS 로 서블릿을 타지않고 바로 바꿔서할수있지만.. 연습을 위해
@GetMapping("/Modify")
public ModelAndView modifyPost(HttpServletRequest request) {
String num = request.getParameter("num");
Post post = postService.getPost(num);
mav.setViewName("Post");
mav.addObject("post", post);
mav.addObject("status", "1");
return mav;
}
@PostMapping("/Modify")
public ModelAndView modifyPost(HttpServletRequest request, HttpServletResponse response, @RequestParam("file") MultipartFile file) throws UnsupportedEncodingException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
request.setCharacterEncoding("UTF-8");
String num = request.getParameter("num");
Post post = postService.getPost(num);
post.setAuthor(request.getParameter("author"));
post.setContents(request.getParameter("contents"));
post.setTitle(request.getParameter("title"));
post.setNum(request.getParameter("num"));
postService.modifyPost(post);
mav.setViewName("redirect:/Content?num=" + post.getNum());
return mav;
}
아래 메서드는 받은 데이터들을 가지고 db에 수정할 수 있게끔 하는 메서드이다.
service 에선 아래 내용으로 dao와 연결시켜준다.
public void modifyPost(Post post) {
postDao.modifyPost(post);
}
dao 에서 sql 을 호출한다.
public void modifyPost(Post post) {
sqlSession.update("PostMapper.modifyPost", post);
}
가져온 Post 데이터들을 Query 안에 넣어 update 할수 있게 한다.
<update id="modifyPost" parameterType="com.example.post.model.Post">
UPDATE TEST1 SET Author = #{author}, Contents = #{contents}, Title = #{title} WHERE num = #{num}
</update>
지금까지 보면 Controller 의 양이 많고 Service 의 내용이 거의 없지만 아직 간단한 업무라 추가되지 않는것이다.
이후 많은 SQL및 기능이 늘어나면 Service 의 코드량도 늘어날것이다.
'IT 공부 > 프로젝트' 카테고리의 다른 글
[Spring] 게시판 만들기 6 - 댓글 기능 1 (1) | 2024.07.10 |
---|---|
[Spring] 게시판 만들기 5 - 삭제 (0) | 2024.07.04 |
[Spring] 게시판 만들기 3 - 글쓰기 Write (1) | 2024.07.01 |
[Spring] 게시판 만들기 2 - 게시글 리스트 출력 및 페이징 (0) | 2024.06.29 |
[Spring] 스프링으로 게시판 만들기 1 (0) | 2024.06.27 |