코드로 배우는 스프링 웹 프로젝트 책을 보면서 함
* 리다이렉션
새로고침을 악용을 막기 위해서 자동으로 다른 페이지로 이동하는 작업이 필요합니다. 보통 등록 작업이 처리되면 자동으로 목록을 조회하는 페이지로 이동하게 됩니다. 등록이 성공한 후에 바로 리다이렉트 결과 페이지로 이동하면 사용자는 post로 작서오딘 결과 페이지를 보지 못한 상태에서 바로 목록 페이지를 보게 됩니다.
목록 페이지를 보기 위해서 BoardController.java를 아래와 같이 수정합니다.
package org.zerock.controller;
import java.awt.List;
import javax.inject.Inject;
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.zerock.domain.BoardVO; import org.zerock.services.BoardService;
@Controller @RequestMapping("/board/*") public class BoardController {
private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
@Inject private BoardService service;
@RequestMapping(value = "/register", method = RequestMethod.GET) public void registerGET(BoardVO board, Model model) throws Exception{ logger.info("register get......"); }
@RequestMapping(value="/register", method = RequestMethod.POST) public String registPOST(BoardVO board, Model model) throws Exception{
logger.info("regist post ......"); logger.info(board.toString());
service.regist(board);
model.addAttribute("result", "success");
//return "/board/success"; return "/redirect:/baord/listALL"; }
@RequestMapping(value="/listAll", method = RequestMethod.GET) public void listAll(Model model) throws Exception{ logger.info("show all list................");
}
} |
registerPos()의 리턴 값이 ‘redirect:…로 시작하도록 수정되었습니다.
추가된 listAll()은 아직 비즈니스 계층과 연결되지 않은 상태입니다. 이 URI의 제작 목적은 오직 등록 처리의 결과의과 반영에 있습니다.
해당 /WEB-INF/views/board/listAll.jsp 페이지 제작
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!DOCTYPE html> <html> <head> <meta charset="EUC-KR"> <title>Insert title here</title> </head> <body> <table class="table table-bordered"> <tr> <th style="width: 10px">BNO</th> <th>TITLE</th> <th>WRITER</th> <th>REGDATE</th> <th style="width: 40px">VIEWCNT</th> </tr> </table>
</body> </html> |
04 전체 목록 구현
등록 작업이 정상적으로 처리되었다면 이제는 전체 목록이 출력되는 페이지를 제작하고, 각 게시물에 조회 페이지로 이동할 수 있는 작업을 진행해야 합니다. 이미 앞에서 BoardDAO와 BoardService에 필요한 메소드를 구현한 상태이므로, 컨트롤러와 JSP의 처리를 진행하면 됩니다. 처음에는 데이터가 많지 않기 때문에 큰 문제가 없지만, 나중에 데이터가 많아진 경우에는 반드시 페이징 처리를 통해서만 목록을 보여주도록 합니다.
4.1 컨트롤러의 완성 및 JSP의 완성
BoardController에서는 BoardService와의 연결 작업을 진행합니다.
Orz.zerock.controller.BoardController의 일부
@RequestMapping(value = "/listAll", method = RequestMethod.GET) public void listAll(Model model) throws Exception { logger.info("show all list................"); model.addAttribute("list", service.listAll());
} |
BoardController의 listAll()은 스프링 mvc의 Model 타입의 객체를 파라미터로 받습니다.
Model을 이용해서 모든 게시물을 jsp로 전송하는 작업을 model.addAttribute()로 처리하고 있습니다.
jsp에서는 JSTL을 사용해서 아래와 같이 최종 코드를 완성합니다.
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!DOCTYPE html> <html> <head> <meta charset="EUC-KR"> <title>Insert title here</title> </head> <body> <table class="table table-bordered"> <tr> <th style="width: 10px">BNO</th> <th>TITLE</th> <th>WRITER</th> <th>REGDATE</th> <th style="width: 40px">VIEWCNT</th> </tr>
<c:forEach items="${list}" var="boardVO">
<tr> <td>${boardVO.bno}</td> <td><a href=''>${boardVO.title}</a></td> <td>${boardVO.writer}</td> <td><fmt:formatDate pattern="yyyy-MM-dd HH:mm" value="${boardVO.regdate}" /></td> <td><span> class="badge bg-red">${boardVO.viewcnt}</span></td> </tr>
</c:forEach> </table> <script> var result = '${msg}';
if(result=='SUCCESS'){ alter("처리가 완료되었습니다."); } </script>
</body> </html> |
listAll.jsp는 JSTL의 <forEach>를 사용해서 화면을 처리합니다. 작성 시간은 포맷을 지정해서 나오게 합니다. 코드의 상단에는 포맷 기능을 이용할 수 있도록 추가적인 설정이 필요합니다.
/WEB-INF/views/board/listAll.jsp의 일부
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ page session="false" %> |
위와 같이 전체 리스트를 볼 수 있는 화면을 만들긴 했지만, 아직 페이징 처리와 검색 기능이 없기 때문에 ‘/board/listAll’은 임시 용도로만 사용합니다.
4.2 목록에 추가로 구현해야 하는 사항들
목록 기능은 게시물 관리에 있어서 가장 중요한 기능이기 때문에 반드시 아래와 같은 기능이 추가될 필요가 있습니다.
- 페이징 처리
일반 웹에서는 페이지 번호를 이용한 처리를 해 주어야 하고, 모바일의 경우에는 무한 스크롤과 같은 기능을 구현해 주어야 합니다.
- 검색 기능
모든 페이지 처리는 검색 기능과 함께 이루어져야만 합니다.
이 외에도 많은 기능이 필요하지만 우선으로 조회, 수정, 삭제를 처리한 후에 페이징 처리와 검색에 대한 처리를 마무리합니다.
코드로 배우는 스프링 웹 프로젝트 책을 보면서 함
'JAVA > spring' 카테고리의 다른 글
paging processing(페이징 처리) - 1 (0) | 2019.08.08 |
---|---|
select Implementation (0) | 2019.08.08 |
spring redirect (4) | 2019.07.04 |
register(등록), success(등록 성공) (0) | 2019.07.04 |
spring homapage (0) | 2019.06.14 |
댓글