게시판 만들어보기 8일차

박세건·2023년 6월 30일
0

수정 버튼 클릭시 url 이동

th:onclick을 사용해서 location=href 를 사용해야하는데 "" 와 '' 구분을 두는 것이 보기 안좋기때문에 ||(리터럴 대체) 를 사용하고 model로 넘겨받은 board 데이터를 url 주소의 일부로 사용하기위해서 ${} 사용

      <button type="button" th:onclick="|location.href='@{/board/modifyForm/{boardId}(boardId=${board.id})}'|" class="btn btn-warning">글 수정&nbsp;</button>

controller

@GetMapping("/user/modifyForm")
    public String modifyForm(Model model, @AuthenticationPrincipal PrincipalDetail principalDetail) {
        User user = principalDetail.getUser();
        model.addAttribute("loginUser", user);
        return "/user/modifyForm";
    }

modifyForm.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
        xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorate="~{layout/default_layout}">
<div layout:fragment="content">
    <!-- Section-->

    <section class="container">
        <h1>글 수정</h1>
        <form action="/board/modify" method="post">
            <div class="form-group">
                <label for="title"> 제목 : </label>
                <input type="hidden" th:value="${board.id}", name="id">
                <input type="text" class="form-control" id="title" th:value="${board.title}" name="title">
            </div>
            <br>
            <div class="form-group">
                <label for="summernote"> 내용 : </label>
                <textarea id="summernote" name="content" >[[${board.content}]]</textarea>
            </div>
            </br>
            <button type="submit" class="btn btn-primary">수정하기</button>
        </form>
        <script>
    // 메인화면 페이지 로드 함수
    $(document).ready(function () {
        $('#summernote').summernote({
            placeholder: '내용을 작성하세요',
            height: 400,
            maxHeight: 400
        });
    });

        </script>
    </section>
</div>

modifyForm으로 이동하면 원래 쓰여있던 게시글의 제목과 내용을 보여주고 수정 가능하도록 설정
수정된 정보를 /board/modify로 전송
controller

@PostMapping("/board/modify")
    public String modify(@ModelAttribute BoardModifyDto boardModifyDto, Model model,@AuthenticationPrincipal PrincipalDetail principalDetail) {
        User loginUser = principalDetail.getUser();
        System.out.println("================================="+boardModifyDto);
        Board board=boardService.modify(boardModifyDto);
        model.addAttribute("board", board);
        model.addAttribute("loginUser", loginUser);
        return "/board/detail";
    }

service

   @Transactional
    public Board modify(BoardModifyDto boardModifyDto) {
        Board board = boardRepository.findById(boardModifyDto.getId()).get();
        board.setTitle(boardModifyDto.getTitle());
        board.setContent(boardModifyDto.getContent());
        boardRepository.save(board);
        return board;
    }

수정완료후 다시 /board/detail인 상세페이지로 가는데 이때 redirect를 통해서 controller를 통해서 html로 접근하게된다면 Hit 인 조횟수가 1올라가기때문에 바로 html로 이동하도록 한다.

Hit(조회수)

controller

   @GetMapping("/board/detail/{boardId}")
    public String detailForm(@PathVariable int boardId, Model model, @AuthenticationPrincipal PrincipalDetail principalDetail) {
        User loginUser = principalDetail.getUser();
        Board board = boardService.detail(boardId);
        model.addAttribute("board", board);
        model.addAttribute("loginUser", loginUser);
        return "/board/detail";
    }
service
  @Transactional
    public Board detail(int boardId) {
        Board board = boardRepository.findById(boardId).get();
        board.setHit(board.getHit()+1);
        return board;
    }

게시글 수정 및 삭제 완료

profile
멋있는 사람 - 일단 하자

0개의 댓글