스프링부트 공부기록(8) - 게시판 프로젝트 :: 머스테치 사용, 게시판 글 등록 구현하기
my code archive
article thumbnail
반응형

지난번 포스팅에서 머스테치를 사용하여 첫 페이지까지 만들었다.

이제 만들어둔 머스테치에 URL을 매핑해야 한다.

 

1. IndexController 클래스 작성

 

  • 머스테치 스타터 덕분에 컨트로러에서 문자열 반환 시 앞의 경로와 뒤의 파일 확장자는 자동으로 지정됨.
  • 앞의 경로는 src/main/resources/templates , 확장자는 .mustache 로 전환되어 View Resolver가 처리하게 됨.

 

2. IndexControllerTest 클래스 작성

 

테스트 통과

 

🤍게시판 글 등록 화면 만들기 :: 부트스트랩 활용

 

1.레이아웃 파일 만들기

  • header.mustache
<!DOCTYPE HTML>
<html>
<head>
    <title>스프링부트 웹서비스</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
</head>
<body>
  • footer.mustache
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>

<!--index.js 추가-->
<script src="/js/app/index.js"></script>
</body>
</html>
  • 페이지 로딩 속도를 높이기 위해 css는 header, js는 footer에 위치함.
  • HTML은 위에서부터 코드가 실행되기 때문에, head가 불러지지 않으면 사용자 쪽에서는 백지 화면만 노출됨.
  • js 용량이 클수록 body 부분의 실행이 늦어지기 때문에, js는 body 하단에 두어 화면이 다 그려진 뒤 호출하는 것이 좋다.

 

2. 글 등록 버튼 추가

 

  • <a> 태그를 이용해 글 등록 페이지로 이동

 

3. 글 등록 버튼 클릭 시 이동하는 주소 IndexController에 매핑

@GetMapping("/posts/save")
    public String postsSave(){  // /posts/save 를 호출하면 psts-save.mustache를 호출하는 메소드 추가
        return "posts-save";
    }

 

4. posts-save.mustache 파일 생성

 

  • /posts/save를 호출하면 나타나는 페이지.
{{>layout/header}}

<h1>게시글 등록</h1>

<div class="col-md-12">
    <div class="col-md-4">
        <form>
            <div class="form-group">
                <label for="title">제목</label>
                <input type="text" class="form-control" id="title" placeholder="제목을 입력하세요">
            </div>
            <div class="form-group">
                <label for="author"> 작성자 </label>
                <input type="text" class="form-control" id="author" placeholder="작성자를 입력하세요">
            </div>
            <div class="form-group">
                <label for="content"> 내용 </label>
                <textarea class="form-control" id="content" placeholder="내용을 입력하세요"></textarea>
            </div>
        </form>
        <a href="/" role="button" class="btn btn-secondary">취소</a>
        <button type="button" class="btn btn-primary" id="btn-save">등록</button>
    </div>
</div>

{{>layout/footer}}

 

5. index.js 파일 생성

var main = {
    init : function (){
        var _this = this;
        $('#btn-save').on("click", function (){
            _this.save();
        });
    },
    save : function (){
        var data = {
            title : $("#title").val(),
            author : $("#author").val(),
            content : $("#content").val()
        };

        $.ajax({
            type: 'POST',
            url: '/api/v1/posts',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            data: JSON.stringify(data)
        }).done(function (){
            alert('글이 등록되었습니다.');
            window.location.href = '/'; //글 등록 성공 시 메인 페이지(/)로 이동
        }).fail(function (error){
            alert(JSON.stringify(error));
        });
    }
    };
        main.init();

 

6. 글 등록 실행해보기

 

http://localhost:8080/ 으로 접근 후 글 등록 버튼 클릭 시 게시글 등록 페이지로 이동!

 

 

역시 한 번에 될리가 없쥬~~?ㅎ

 

 

역시 오타였쥬..?ㅎㅎ

등록 후 '글이 등록되었습니다.' 팝업 창이 나온다.

 

글 등록 후 SELECT 쿼리문 실행해 보면 등록한 글을 확인할 수 있다.

반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형