반응형

저번엔 삭제처리를 알아보았다.

이번에는 수정을 알아보아야하는데

아직 JPA 극 초보라 변경감지나 MErge같은 기능을 배우지 않아 

그냥 set 후 get으로 넘겨 버렸다. 이렇게 하면 안됨을 명심하자 

그냥 스프링부트와 CRUD를 하기 위함임을 

나중에 배워 보자 

 

우선 뷰페이부터 만들자 

 

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"> <!-- 위에 xmlns 하면 타임리프 문법을 쓸수 있다.-->
<head>
  <meta charset="UTF-8">
  <title>게시물 작성폼</title>
</head>

<style>
    .layout{
    width : 500px;
    margin: 0 auto;
    margin-top :40px;
    }

    .layout  input, textarea {
    width : 100%;
    margin-top :10px;
    box-sizing : border-box;
    }

    textarea{
    height : 300px;
    }
</style>

<body>
<div class="layout">
  <form th:action="@{/board/update/{id}(id = ${board.id})}" method="post">
    <input name="title" type="text" th:value="${board.title}">
    <textarea name="content" th:text ="${board.content}"></textarea>
    <button>수정</button>
  </form>
</div>
</body>
</html>

사실 저번에 글 작성 페이지와 변한건 없다. 

 

우선 리스트에서 수정버튼에 id를 담아 넘겨주어야하니 리스트에 수정버튼 + 파라미터값을 넘기는 Url을 해보자

 

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"> <!-- 위에 xmlns 하면 타임리프 문법을 쓸수 있다.-->
<head>
    <meta charset="UTF-8">
    <title>게시글 상세페이지</title>
</head>
<body>

<h1 th:text="${board.title}">제목 입니다.</h1>
<p th:text ="${board.content}">내용이 들어갈 내용입니다.</p>
<a th:href="@{/board/delete?(id=${board.id})}">글 삭제</a>
<a th:href="@{/board/modify/{id}(id=${board.id})}">글 수정</a>
</body>
</html>

타임리프로 th:href = "@{}"

을 하여 파라미터 값을 넘긴다. 

이때 삭제랑은 좀 다른데 이떄 나는 

pathvariable을 이용할 것이다. 

원래 삭제버튼 같은경우에는

/board/delete?id=숫자 이렇게 살짝 지저분하게 떨어지는데

위 방법처럼하면

/board/modify/1 이런씩으로 깔끔하게 떨어진다. 

 

이제 컨트롤러를 보자.

 

    @GetMapping("/board/modify/{id}")
    public String boardModify(@PathVariable("id") Integer id , Model model){
        System.out.println("제발류");
        model.addAttribute("board",boardService.boardView(id));

        return "boardmodify";
    }

제발류 이건 무시하자 안되서 기도메타로 넣은거라 

 

암튼 각설하고 

이제 view에서 글번호를 가져와서 modify에다 뿌려 줄것이다.

이떄 pathvariabe을 쓰고 근데 이건 스프링이랑 같은지 모르겠는데

id값과 변수명이 일치하면 안해도 된다고 알고 있다. 

 

맞는지는 검증이 필요해보인다. 

 

id값으로 boardView를 불러와서 뿌려준다. 

 

그럼 다음과 같이 뿌려줄것이다.

 

수정버튼을 누르게 되면

 

이렇게 url을 타고 온다

이제 수정버튼을 누르면 수정이 되게 해보자

 

    @PostMapping("/board/update/{id}")
    public String boardUpdate(@PathVariable("id") Integer id , Board board , Model model){

        Board boardTemp = boardService.boardView(id);
        boardTemp.setTitle(board.getTitle());
        boardTemp.setContent(board.getContent());

        model.addAttribute("message" , "글 수정 완료.");
        model.addAttribute("SearchUrl" , "/board/list");

        // 절대 이렇게 하면 안되고 Jpa에서 제공하는 변경감지나 Merge 기능을 따로 공부하자.
        boardService.write(boardTemp);

        return "Message";
    }

먼저 Integet 타입에 id를 받고 board를 받아 수정할 대상을 값을 받아준다.

그다음에 set으로 깔아두고 불러온 파라미터를 get으로 보내면 수정이 완료 된다. 

 

다시한번 말하지만 이렇게하는게아니고 변경감지를 통해서 해야한다. 

 

아까 8번 게시물을 수정해보자

 

 

수정8로 업데이트가 되었다.

 

 

반응형

+ Recent posts