글 쓰기
링크 생성
링크는 이전에 게시판 목록 페이지를 만들때 해줬다.
컨트롤러 매핑
컨트롤러에서 boardPost.jsp로 매핑해주는거로 시작한다.
package com.poby.myapp.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.poby.myapp.service.BoardService;
@Controller
public class BoardController {
@Autowired
BoardService service;
// 게시판 목록(페이징, 검색)
@RequestMapping("/board/boardList")
public ModelAndView boardList() {
ModelAndView mav = new ModelAndView();
return mav;
}
// 글 쓰기
@GetMapping("/board/boardPost")
public String boardPost() {
return "board/boardPost";
}
}
페이지 이동
글 쓰기 form을 만들어보자.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<title>글 쓰기</title>
<div class="container">
<h1>글 쓰기 form</h1>
<form action="/myapp/board/boardPostOk">
<ul>
<li>제목</li>
<li><input type="text" name="subject" id="subject" size="50"></li>
<li>
<textarea name="content" id="content" rows="20" cols="100"></textarea>
</li>
<li><input type="submit" value="저장"></li>
</ul>
</form>
</div>
유효성 검사
submit하기 전에 제목과 내용이 비어있진 않은지 확인해주자.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<script>
function formCheck(){
if(document.getElementById("subject").value == ""){
alert("제목을 입력하세요.");
return false;
}
if(document.getElementById("content").value == ""){
alert("내용을 입력하세요.");
return false;
}
return true;
}
</script>
<title>글 쓰기</title>
<div class="container">
<h1>글 쓰기 form</h1>
<form method="post" action="/myapp/board/boardPostOk" onsubmit="return formCheck()">
<ul>
<li>제목</li>
<li><input type="text" name="subject" id="subject" size="50"></li>
<li>
<textarea name="content" id="content" rows="20" cols="100"></textarea>
</li>
<li><input type="submit" value="저장"></li>
</ul>
</form>
</div>
이전엔 jQuery로 했지만, 이번엔 Javascript로 했다. action에 boardPostOk로 링크를 생성했다.
컨트롤러 매핑
이제 입력받은 제목과 내용을 DB에 등록해주자. 컨트롤러에 boardPostOk를 매핑하자.
package com.poby.myapp.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.poby.myapp.service.BoardService;
import com.poby.myapp.vo.BoardVO;
@Controller
public class BoardController {
@Autowired
BoardService service;
// 게시판 목록(페이징, 검색)
@RequestMapping("/board/boardList")
public ModelAndView boardList() {
ModelAndView mav = new ModelAndView();
return mav;
}
// 글 쓰기
@GetMapping("/board/boardPost")
public String boardPost() {
return "board/boardPost";
}
// 새 글 등록
@PostMapping("/board/boardPostOk")
public ModelAndView boardPostOk(BoardVO vo, HttpServletRequest req) { // 제목, 내용
ModelAndView mav = new ModelAndView();
vo.setIpAddr(req.getRemoteAddr()); // 작성자 ip주소
vo.setUsername((String)req.getSession().getAttribute("username")); // 현재 로그인한 아이디
return mav;
}
}
작성자의 ip주소를 불러와야하기 때문에 매개변수로 HttpServletRequest를 넣었다.
Service
DAO, Service, ServiceImpl에도 메소드를 만들자.
package com.poby.myapp.service;
import com.poby.myapp.vo.BoardVO;
public interface BoardService {
// 새 글 등록
public int boardPostOk(BoardVO vo);
}
package com.poby.myapp.service;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import com.poby.myapp.dao.BoardDAO;
import com.poby.myapp.vo.BoardVO;
@Service
public class BoardServiceImpl implements BoardService {
@Inject
BoardDAO dao;
@Override
public int boardPostOk(BoardVO vo) {
return dao.boardPostOk(vo);
}
}
DAO, 쿼리문 작성
package com.poby.myapp.dao;
import com.poby.myapp.vo.BoardVO;
public interface BoardDAO {
// 새 글 등록
public int boardPostOk(BoardVO vo);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.poby.myapp.dao.BoardDAO">
<insert id="boardPostOk" parameterType="com.poby.myapp.vo.BoardVO">
INSERT INTO board_tbl(postno, subject, content, username, ipAddr)
VALUES(board_seq.nextval, #{subject}, #{content}, #{username}, #{ipAddr})
</insert>
</mapper>
컨트롤러 모델&뷰
// 새 글 등록
@PostMapping("/board/boardPostOk")
public ModelAndView boardPostOk(BoardVO vo, HttpServletRequest req) { // 제목, 내용
ModelAndView mav = new ModelAndView();
vo.setIpAddr(req.getRemoteAddr()); // 작성자 ip주소
vo.setUsername((String)req.getSession().getAttribute("username")); // 현재 로그인한 아이디
mav.addObject("result", service.boardPostOk(vo));
mav.setViewName("board/boardPostOk");
return mav;
}
페이지 이동
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!-- attribute로 넘어온 변수 : result -->
<!-- 등록 안 됐을때, 뒤로가기 -->
<c:if test="${ result=0 }">
<script>
alert("글 등록 실패.");
history.back();
</script>
</c:if>
<!-- 등록됐을때, 목록으로 이동 -->
<c:if test="${ result>0 }">
<script>
location.href = "/myapp/board/boardList";
</script>
</c:if>
랜덤한 뉴스 기사를 가져와서 등록하고, board_tbl에 저장되었는지 확인하자.
이제 글의 개수에 따라서 페이지를 만들어보자.
'Spring' 카테고리의 다른 글
12.14.(수) Spring Framework(20): 게시판 기능(5) (0) | 2022.12.17 |
---|---|
12.14.(수) Spring Framework(19): 게시판 기능(4) (0) | 2022.12.17 |
12.14.(수) Spring Framework(17): 게시판 기능(2) (0) | 2022.12.15 |
12.14.(수) Spring Framework(16): 게시판 기능(1) (0) | 2022.12.15 |
12.13.(화) Spring Framework(15): 회원관리 기능(9) (0) | 2022.12.15 |