습관제작소

22-08-29 JavaSpring Ajax 활용(테이블 Insert) 본문

SMHRD or ITSchool/JavaSpring and Boot

22-08-29 JavaSpring Ajax 활용(테이블 Insert)

KUDO 2022. 8. 29. 12:40

- base.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script
    src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script
    src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>

    <div class="container">
        <h2>SpringMVC02 SpringMVC + Ajax</h2>
        <div class="panel panel-default">
            <div class="panel-heading">스프링 게시판 만들기</div>
            <div class="panel-body">

                <table class="table table-hover table-bordered">
                    <thead>
                        <tr>
                            <td>글 번호</td>
                            <td>제목</td>
                            <td>작성자</td>
                            <td>작성일</td>
                            <td>조회수</td>
                        </tr>
                    </thead>
                    <tbody id="tbody">
                    </tbody>

                </table>
                <button id="openForm" class="btn-sm btn btn-info">작성하기</button>

                <div id="boardForm" style="display: none">
                    <form id="Form" class="form-horizontal">
                        <div class="form-group">
                            <label class="control-label col-sm-2" for="title">title:</label>
                            <div class="col-sm-10">
                                <input type="text" class="form-control" id="title"
                                    placeholder="Enter title" name="title">
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="control-label col-sm-2" for="writer">writer:</label>
                            <div class="col-sm-10">
                                <input type="text" class="form-control" id="writer"
                                    placeholder="Enter writer" name="writer">
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="control-label col-sm-2" for="content">content:</label>
                            <div class="col-sm-10">
                                <textarea rows="10" class="form-control" name="content"
                                    id="content"></textarea>
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button id="submitForm" type="button" class="btn btn-default">Submit</button>
                            </div>
                        </div>
                    </form>
                </div>


            </div>
            <div class="panel-footer">빅데이터 14차 백성연</div>
        </div>

    </div>

    <script src="resources/js/board.js"></script>
    <!-- 좌표는 webapp(=web)시작이다. 그래서 같은 프로젝트 같은 폴더라면 앞이 사라진다. -->
    <script type="text/javascript">
        // 페이지가 로드될 때, Ajax 요청을 할수 있도록 만들어 보자!
        $(document).ready(boardList);

    </script>

</body>
</html>

- BoardRestController.java


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.smhrd.domain.Board;
import com.smhrd.mapper.BoardMapper;

@Controller
public class BoardRestController {

    //Ajax요청을 처리할 컨트롤러 >> RestController


    @Autowired
    private BoardMapper mapper;

    @RequestMapping("/test")
    public @ResponseBody String test(String data) {
        // 어노테이션 추가하자
        // @ResponseBody >> return하는 내용을 그대로 응답해줌
        // "문자열로 제일 많이 리턴함"

        // function (res)응답에 date이어야 한다. 만얀 리턴에 주소값이 들어가면 오류


        System.out.println("요청들어옴 : "+data);

        return "test";
    }

    // 받은 숫자 제곱 반환
    @RequestMapping("/square")
    public @ResponseBody String square(String num ) {
        int number = Integer.parseInt(num);
        int square= number*number;


        return square+"";
    }


    @RequestMapping("/boardList.do")
    public @ResponseBody List<Board> boardList() {

        List<Board>list=mapper.boardList();


        // 문제!!
        // 1. http 통신에서 글자(문자열)만 응답해줄 수 있음
        // 2. Javascript에서는 List<Board>를 이해하지 못함

        // 해결!!
        // List<Board> >> JSON변환
        // Jackson Datadind 라이브러리 사용(자동으로 json통과~)

        return list;
    }

    // 22-08-29 Insert
    @RequestMapping("boardInsert.do")
    public @ResponseBody String boardInsert(Board inputs) {

        mapper.boardInsert(inputs);
        return "";
    }

}

- board.js

        // insert 만들기
        $('#submitForm').on('click',function(){

            // Form태그 안에 있는 데이터를 쿼리스트링 처럼 나타내준다.
            let inputs=$('#Form').serialize();
            console.log(inputs);
            // date : inputs
            $.ajax({
                url : 'boardInsert.do',
                type : 'post',
                data : inputs,
                success:function(res){
                    console.log(res);
                    window.location.reload();  // << 리스트 새로고침, form태그 초기화 form 접기 즉, 새로고침하자!

                },
                errer : function (e) {
                    alert(e);
                }
            });
        })
Comments