본문 바로가기
자바의 봄(Spring)/프로젝트

SpringBoot-Movie-Thymeleaf-Project - 7 게시글 작성하기

by 종안이 2024. 4. 5.
### Day 24-04-05
1. 로그인 전과 로그인 시 네비게이션 바 화면 변경
2. 로그아웃 기능 추가 
3. 게시글 작성 폼 추가 
4. 게시글 작성 기능 추가 

 

# 1. BoardController 

package com.spring.MovieProject.controller;


import com.spring.MovieProject.entity.Board;
import com.spring.MovieProject.entity.User;
import com.spring.MovieProject.service.board.BoardServiceImpl;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

@Controller
public class BoardController {

    private BoardServiceImpl boardService;

    public BoardController(BoardServiceImpl boardService) {
        this.boardService = boardService;
    }
    /*
     * 게시글과 관련된 컨트롤러로 해당하는 주소로 게시글들이 작성되어 있는 페이지로 이동합니다.
     * */

    @GetMapping("/v1/board")
    public String boardList(Model model,@AuthenticationPrincipal User user) {

        List<Board> boardList = boardService.getBoardList();
        model.addAttribute("board", boardList);
        model.addAttribute("user", user);
        return "Board/boardList";
    }

    /*
    * 24-04-05
    * author: LeeJongAnn
    * description: someone who login user can create post , and finished post redirection in boardList url /v1/board
    * */
    @PostMapping("/v1/createBoard")
    public String boardCreate(Model model, Board board, @AuthenticationPrincipal User user) {

        boardService.createBoard(board);
        return "redirect:/v1/board";
    }

    /*
     * 24-04-05
     * author: LeeJongAnn
     * description: someone who login user can see post createForm
     * */
    @GetMapping("/v1/boardForm")
    public String boardCreateForm(Model model,Board board) {
        model.addAttribute("board",board);
        return "Board/boardup";
    }
}

 

 

# 2. BoardServiceImpl 

package com.spring.MovieProject.service.board;


import com.spring.MovieProject.entity.Board;
import com.spring.MovieProject.repository.BoardRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BoardServiceImpl implements boardService {


    private BoardRepository boardRepository;

    @Autowired
    public BoardServiceImpl(BoardRepository boardRepository) {
        this.boardRepository = boardRepository;
    }

    @Override
    public Board createBoard(Board board) {

        Board saveBoard = boardRepository.save(board);
        return saveBoard;
    }

    @Override
    public List<Board> getBoardList() {
        List<Board> boardList = (List<Board>) boardRepository.findAll();
        return boardList;
    }

    @Override
    public Board updateBoard() {
        return null;
    }

    @Override
    public void deleteBoard() {

    }

    @Override
    public Board getBoard() {
        return null;
    }
}

 

 

지금까지 작성되어 있는 서비스 계층과 컨트롤러 계층의 코드이다 . 

게시글 작성 화면은 아래와 같이 나오며 해당 html 코드는 아래와 같다. 

 

<!DOCTYPE html>

<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head th:replace="~{Part/header :: header}">
</head>
<nav th:replace="~{Part/navbar :: navigation}"></nav>
<body>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
        crossorigin="anonymous"></script>



<div class="container mt-5">

    <form th:action="@{/v1/createBoard}" th:object="${board}" method="post" class="row g-3">

        <h5 class="my-3 border-bottom pb-2">게시글 등록</h5>
            <div class="mb-3">
                <label for="subject" class="form-label">제목</label>
                <input type="text" name="subject" id="subject" th:field="*{title}" class="form-control">
            </div>
            <div class="mb-3">
                <label for="content" class="form-label">내용</label>
                <textarea name="content" id="content" class="form-control" th:field="*{content}" rows="10"></textarea>
            </div>
        <button type="submit" value="저장하기" class="btn btn-primary my-2" id="post-button" style="width: 200px;">게시글 등록</button>
    </form>
</div>
<script>


</script>
</body>

</html>

 

그런데 게시글을 작성하고 나서 보면 문제가 발생한다 . 

 

 

해당 글의 작성자가 보이지 않는 문제가 발생한다. 왜 그런걸까? 

다음 글에서 해당 문제를 고쳐보도록 하겠다.

댓글