Last Updated: 2022년 12월 14일
url 주소에 따른 기능 구현 및 페이지 설정을 한다.
출처: 내 컴퓨터
BoardController.java
package kr.co.narrator.board.controller; import java.util.List; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import kr.co.narrator.board.common.PageMaker; import kr.co.narrator.board.common.SearchCriteria; import kr.co.narrator.board.dto.BoardDTO; import kr.co.narrator.board.service.BoardService; @Controller @RequestMapping("/board/*") public class BoardController { private static final Logger logger = LoggerFactory.getLogger(BoardController.class); // 의존관계 주입 -> BoardServiceImpl 생성 @Inject BoardService boardService; // 예외처리, DB에서 발생하는 에러처리 @ExceptionHandler(RuntimeException.class) public String exceptionHandler(Model model, Exception e) { logger.info("exception : " + e.getMessage()); model.addAttribute("exception", e); return "error/exception"; } /** 게시판 리스트 페이징+검색 */ @RequestMapping(value = "/boardList", method = RequestMethod.GET) public String boardList(SearchCriteria cri, Model model) throws Exception { int count = boardService.boardListCnt(cri); // 페이지 생성 PageMaker pageMaker = new PageMaker(); pageMaker.setCri(cri); pageMaker.setTotalCount(count); // 검색 조건과 페이지에 대한 정보를 리스트로 가져온다. List<BoardDTO> boardList = boardService.boardList(cri); model.addAttribute("boardList", boardList); model.addAttribute("count", count); model.addAttribute("searchType", cri.getSearchType()); model.addAttribute("keyword", cri.getKeyword()); model.addAttribute("pageMaker", pageMaker); model.addAttribute("page", cri.getPage()); return "board/boardList"; } // 게시판 조회 @RequestMapping(value = "/boardContent/{seq}", method = RequestMethod.GET) public String boardContent(@ModelAttribute SearchCriteria cri, Model model, @PathVariable int seq) throws Exception { BoardDTO boardDTO = boardService.boardContent(seq); //List<UploadFileVO> filesList = filesService.filesList(seq); model.addAttribute("boardContent", boardDTO); //model.addAttribute("filesList", filesList); return "board/boardContent"; } /** form 커스텀 태그 사용 : 바인딩을 위해 boardDTO 객체를 Model로 담아서 넘겨줌 */ @RequestMapping(value = "/boardForm", method = RequestMethod.GET) public String boardForm(Model model) { model.addAttribute("boardDTO", new BoardDTO()); return "/board/boardForm"; } /** * 게시글 작성 : 다중 업로드 버전 Hibernate-validator까지 처리한 코드 */ @RequestMapping(value = "/boardForm", method = RequestMethod.POST) // public String boardForm(@Valid BoardVO boardVO, BindingResult // bindingResult, HttpSession session, MultipartHttpServletRequest // mtfRequest, Model model) throws Exception { public String boardForm(@Valid BoardDTO boardDTO, BindingResult bindingResult, HttpSession session, HttpServletRequest request, Model model) throws Exception { if (bindingResult.hasErrors()) { return "/board/boardForm"; } else { boardService.boardInsert(boardDTO, request); logger.info("boardForm, POST : " + boardDTO); return "redirect:/board/boardList"; } } }