-
나프 - 게시판 만들기 (3)Web/Spring 2023. 8. 3. 12:32
1. 등록 및 조회 구현
List.jsp 타이플에 a태그 걸어서 상세보기 페이지로 넘어가도록 함
<td><a href="<c:url value='/get.do?bno=${vo.idx}'/>">${vo.title}</a></td>
@RequestMapping("/get.do") public String get(@RequestParam("bno") int bno, Model model) { BoardVO board=service.get(bno); model.addAttribute("board", board); return "get";//get.jsp }
- 처리 컨트롤러, 넘어온 번호를 통해 DB에서 해당 번호에 게시글 찾아서 BoardVO에 담아서 리턴
- model에 이를 담은 다음 get.jsp로 forward
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!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.4/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>Board Read</h2> <div class="panel panel-default"> <div class="panel-heading">Board Read Page</div> <div class="panel-body">Panel Content <div class="form-group"> <label>BNO</label> <input type="text" class="form-control" id="idx" name="idx" value="${board.idx}" readonly="readonly"> </div> <div class="form-group"> <label>Title</label> <input type="text" class="form-control" id="title" name="title" value="${board.title}" readonly="readonly"> </div> <div class="form-group"> <label>Text area</label> <textarea class="form-control" rows=3 name="contents"readonly="readonly" >${board.contents}</textarea> </div> <div class="form-group"> <label>Writer</label> <input type="text" class="form-control" id="writer" name="writer" value="${board.writer}" readonly="readonly"> </div> <button class="btn btn-default">Modify</button> <button class="btn btn-info">List</button> </div> <div class="panel-footer">Panel Content</div> </div> </div> </body> </html>
- get.jsp는 위와 같다.
2. 수정페이지 구현
- get.jsp에 modify나 List버튼을 누르면, 수정페이지 혹은 List페이지로 넘어가도록 버튼을 설정
$(document).ready(()=>{ $("#list").click(()=>{ location.href="<c:url value='/list.do'/>"; }); $("#modify").click(()=>{ const idx = $("#idx").val(); location.href="<c:url value='/modify.do'/>?bno="+idx; }) });
- 이때 게시물의 번호를 가져가야한다. -> 특정 글에 대한 수정이므로, 수정페이지는 특정 게시글 기반으로 페이지를 꾸려야하기 때문
@RequestMapping(value="/modify.do",method=RequestMethod.GET) //get.jsp에 modify버튼 public String modifyGET(@RequestParam("bno") int bno, Model model){ BoardVO board=service.get(bno); model.addAttribute("board", board); return "modify";
- modify.do를 get 혹은 post방식으로 나누어 처리하도록 하자
- get방식으로 넘어온 요청은 get.jsp에 modify버튼이다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!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.4/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script> <script type="text/javascript"> $(document).ready(()=>{ $("#list").click(()=>{ location.href="<c:url value='/list.do'/>" }) }); </script> </head> <body> <div class="container"> <h2>Board Modify Page</h2> <div class="panel panel-default"> <div class="panel-heading">Board Modify Page</div> <div class="panel-body"> <form action="<c:url value='modify.do'/>" method="post"> <div class="form-group"> <label>Bno</label> <input type="text" class="form-control" id="idx" name="idx" value="${board.idx}" readonly="readonly"> </div> <div class="form-group"> <label>Title</label> <input type="text" class="form-control" id="title" name="title" value="${board.title}"> </div> <div class="form-group"> <label>Text area</label> <textarea class="form-control" rows=3 name="contents" >${board.contents}</textarea> </div> <div class="form-group"> <label>Writer</label> <input type="text" class="form-control" id="writer" name="writer" value="${board.writer}" readonly="readonly"> </div> <button type="submit" class="btn btn-default">Modify</button> <button id="remove" type="button" class="btn btn-default">Remove</button> <button id="list" type="button" class="btn btn-info">List</button> </form> </div> <div class="panel-footer"></div> </div> </div> </body> </html>
-modify.jsp -> 몇가지 readonly 속성만 제외하면, register와 유사
3. 수정 및 삭제 구현
- modify.jsp에서 버튼을 통해 수정 혹은 삭제 요청이 발생할 때 이를 처리할 컨트롤러 구성
@RequestMapping(value="/modify.do",method=RequestMethod.POST) public String modifyPOST(BoardVO board){ service.modify(board); return "redirect:/list.do"; } @RequestMapping("/remove.do") public String remove(@RequestParam("bno") int bno) { service.remove(bno); return "redirect:/list.do"; }
$("#remove").click(()=>{ location.href="<c:url value='/remove.do'/>?bno=${board.idx}"; });
- modify.jsp에 삭제만 추가, modify는 form에 submit을 통해 post방식으로 전달된다.
4. 조회수 업데이트
4.1 xml 및 인터페이스에 메서드 추가
<update id="countUpdate" parameterType = "Integer"> update tb_board set count=count+1 where idx=#{idx} </update>
public void countUpdate(int bno);
- 상세보기 클릭시 조회수가 올라가도록 처리할 것이다.
- service에 get이 호출 될 때마다 mapper에 countUpdate메서드가 실행되도록 하자
- 상세보기 클릭시 해당 게시물의 번호가 넘어온다. 이를 받아서 해당 게시물 번호의 조회수를 업데이트 하자
4.2 service메서드 기존 get에 mode추가
@Override public BoardVO get(int bno, String mode) { if(mode.equals("get")) mapper.countUpdate(bno); return mapper.read(bno); }
- List.jsp에서 상세보기를 클릭시, 혹은 modify버튼을 클릭 시 두가지 경우에 service메서드에 get이 호출 된다.
- 이때 조회수는 controller에 get메서드에 의해서만 조회수가 올라가고 modify메서드에는 반응하면 안된다.
- 따라서 get에 mode 매개변수를 추가하여, 서비스의 get이 호출 될 때, 컨트롤러에 get메서드인지 modify메서드인지에 따라 조회수를 올릴 것인지 말 것인지를 결정하도록 하자
@RequestMapping("/get.do") public String get(@RequestParam("bno") int bno, Model model) { BoardVO board=service.get(bno,"get"); model.addAttribute("board", board); return "get";//get.jsp } @RequestMapping(value="/modify.do",method=RequestMethod.GET) public String modifyGET(@RequestParam("bno") int bno, Model model){ BoardVO board=service.get(bno,"modify"); model.addAttribute("board", board); return "modify"; }
'Web > Spring' 카테고리의 다른 글
스프링 핵심 원리 (2) - 스프링 컨테이너와 스프링 빈 (0) 2023.08.17 스프링 핵심 원리 (1) - 예제 순수 자바 to 스프링 컨테이너 (0) 2023.08.16 나프 - 게시판 만들기(2) (0) 2023.08.02 나프 - 게시판 만들기(1) (0) 2023.08.02 Spring MVC02 - 다중파일 업로드 (0) 2023.06.30