게시글 등록 화면 만들기, 게시글 등록 처리 하기

GW·2023년 9월 21일

데이터 crud -> db에 update, select 등을함
controller ->service ->dao->DB ->jsp

DB에서 아무 데이터 없이 화면만 노출하겠다 하면 위 과정이 생략이 된다.

화면만 노출 controller -> jsp

Spring Application 서버 재실행 기준

  • JAVA, JSP, CSS, Javascript등을 수정했다
    => 재실행 할 필요 없다.(자동 재실행됨: Hot Deploy)

XML, Properties,yml 파일을 수정했다.
=>재실행 반드시 필요함.

# 게시글 등록 화면 만들기

boardwrite.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시글 작성하기</title>
<style type="text/css">
	div.grid{
		display: grid;
		grid-template-columns: 80px 1fr;
        grid-template-rows: 28px 28px 320px 1fr;
        row-gap: 10px;
	}
    div.grid >div.btn-group{
        display: grid;
        grid-column: 1/3;

    }
    div.grid div.right-align{
        text-align: right;
    }
    label{
        padding-left: 10px;
    }
    button,input,textarea{
        padding: 10px;
    }
</style>
</head>
<body>
    <!-- name의 역활 서버로 전송할때 name으로 전송하겠다.
         DB변수랑 같아야하고 setter가 있어야한다. -->
    <h1>게시글 작성</h1>
    <form method="post">
        <div class="grid">
            <label for="subject">제목</label>
            <input type="text" name="subject" id="subject"/>

            <label for="email">이메일</label>
            <input type="email" name="email" id="email"/>

            <label for="content">내용</label>
            <textarea name="content" id="content" style="height:300px;"></textarea>
            <div class="btn-group">
                <div class="right-align">

                    <input type="submit" value="저장"/>
                </div>
            </div>
            
        </div>
    </form>
</body>
</html>

게시글 등록 처리 하기

BoardDAO.java

/**
 * DB에 새로운 게시글을 등록한다.
 * @param boardVO 사용자가 입력한 게시글 정보
 * @return DB 에 Insert 한 개수
 */
public int createNewBoard(BoardVO boardVO);

Impl

@Override
	public int createNewBoard(BoardVO boardVO) {
		//getSqlSession().insert()는 insert한 ROW의 개수를 반환한다.
		return getSqlSession().insert("createNewBoard",boardVO);
	}

mapper

<insert id="createNewBoard"
  		  parameterType="com.ktdsuniversity.edu.bbs.vo.BoardVO">
INSERT INTO BOARD 
( ID
 , SUBJECT
 , CONTENT
 , EMAIL
 , VIEW_CNT
 , CRT_DT
 , MDFY_DT 
 , FILE_NAME
 , ORIGIN_FILE_NAME)
  VALUES
 (SEQ_BOARD_PK.NEXTVAL
 , #{subject}
 , #{content}
 , #{email}
 , 0
 , SYSDATE
 , SYSDATE 
 , #{fileName}
 , #{originFileName})
  </insert>

service

/**
	 * 새로운 게시글을 등록 처리한다.
	 * @param boardVO 사용자가 입력한 게시글의 정보(내용)
	 * @return 정상적으로 등로고디었는지에 대한 여부 
	 */
	public boolean createNewBoard(BoardVO boardVO);
	

serviceImpl

@Override
	public boolean createNewBoard(BoardVO boardVO) {
		//DB에 게시글을 등록한다.
		//createCount에는 DB에 등록한 게시글의 개수를 반환
		int createCount = boardDAO.createNewBoard(boardVO);
		//DB에 등록된 개수가 0보다 크면 성공, 아니라면 실패
		
		return createCount>0;
	}

Controller

@GetMapping("/board/write")
	public String viewBoardWritePage() {//화면만 보여준다하면 string을 반환하는게 좋다
		
		return "board/boardwrite";
	}
	@PostMapping("/board/write")
	public ModelAndView doBoardWrite(@ModelAttribute BoardVO boardVO) {
		System.out.println("제목"+boardVO.getSubject());
		System.out.println("이메일"+boardVO.getEmail());
		System.out.println("내용"+boardVO.getContent());
		System.out.println("등록일"+boardVO.getCrtDt());
		System.out.println("수정일"+boardVO.getMdfyDt());
		System.out.println("FileName"+boardVO.getFileName());
		System.out.println("OriginFileName"+boardVO.getOriginFileName());
		ModelAndView modelAndView =new ModelAndView();
		boolean isSuccess=boardService.createNewBoard(boardVO);
		if(isSuccess) {
			//게시글의 등록결과가 성공이라면
			//board/list URL로 이동한다.
			//redirect:는 화면을 이동시키는 view다.
			// redirect로 화면을 전환시킬 때에는
			//addObject를 사용할 수 없다.
			modelAndView.setViewName("redirect:/board/list");
			return modelAndView;
		}
		else {
			//게시글의 등록 결과가 실패라면
			//게시글 등록(작성)화면으로 데이터를 보내준다.
			// 게시글 등록(작성) 화면에서 boardVO값으로 등록 값을 설정해야한다.
			modelAndView.setViewName("board/boardwrite");
			modelAndView.addObject("boardVO",boardVO);
			return modelAndView;
		}
	}

0개의 댓글