본문 바로가기
728x90
반응형

 

이어서 게시글 조회 및 수정 기능을 추가해 본다.

 

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 의 코드량도 늘어날것이다.

728x90
반응형

한걸음 한걸음

개인적인 기록