09009
[Spring] 예제1 - 게시글 상세보기 본문
게시글 리스트에서 게시글 제목을 클릭하면 상세보기 기능을 이용할 수 있도록 수정
✍ views/board/mainPage.jsp
(중복 코드 생략)
<table border="1">
<tr>
<td>글번호</td>
<td>제목</td>
<td>조회수</td>
<td>작성자</td>
<td>작성일</td>
</tr>
<c:forEach items="${list}" var="map">
<tr>
<td>${map.boardDto.id}</td>
<td><a href="./readContentPage?id=${map.boardDto.id}">${map.boardDto.title}</a></td>
<td>${map.boardDto.read_count}</td>
<td>${map.memberDto.nickname}</td>
<td>${map.boardDto.reg_date}</td>
</tr>
</c:forEach>
</table>
게시글 상세보기 시 각 페이지의 모양은 모두 똑같지만 데이터는 달라야 한다.
예를 들어 4번 게시글의 제목을 클릭하면 4번 게시글의 데이터가 화면에 출력되어야 한다.
4번 게시글 제목을 클릭할 시 화면
게시글 상세보기 구현
✍ BoardController.java
@RequestMapping("readContentPage")
public String readContentPage(int id) {
// 사실 int는 null 값이 선언되지 못하므로 null이면 터진다.
return "board/readContentPage";
}
✍ BoardSqlMapper.java
게시글 번호를 가져오는 메서드 (selectById) 추가
package com.ja.finalproject.board.mapper;
import java.util.List;
import com.ja.finalproject.dto.BoardDto;
public interface BoardSqlMapper {
public BoardDto selectById(int id);
public void insert(BoardDto boardDto);
public List<BoardDto> selectAll();
}
✍ BoardSqlMapper.xml
<select id="selectById" resultType="com.ja.finalproject.dto.BoardDto">
SELECT *
FROM fp_board
WHERE id = #{id}
</select>
✍ BoardServiceImpl.java
여러 개가 아닌 하나의 게시글을 조회하는 작업이 필요하므로 리턴타입은 list가 아닌 map으로 선언한다.
// List일 필요없고 조회할 개시글은 한 개이므로 hashmap
public Map<String, Object> getBoard(int id) {
Map<String, Object> map = new HashMap<>();
BoardDto boardDto = boardSqlMapper.selectById(id);
MemberDto memberDto = memberSqlMapper.selectById(boardDto.getMember_id());
map.put("boardDto", boardDto);
map.put("memberDto", memberDto);
return map;
}
model: 출력해야할 데이터를 담는 공간이라고 생각하면 된다.
redirect하는 경우에는 model을 사용할 이유가 없다. forwarding이 아니기 때문에
✍ BoardController.java
메서드 수정
@RequestMapping("readContentPage")
public String readContentPage(Model model, int id) {
// 사실 int는 null 값이 선언되지 못하므로 null이면 터진다.
Map<String, Object> map = boardService.getBoard(id);
model.addAttribute("data", map);
return "board/readContentPage";
}
게시글 상세보기 페이지 만들기
✍ views/board/readContentPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>게시글 상세 보기</h1>
제목 : ${data.boardDto.title} <br>
작성자 : ${data.memberDto.nickname} <br>
작성일 : ${data.boardDto.reg_date} <br>
조회수 : ${data.boardDto.read_count} <br>
내용 : <br>
${data.boardDto.content}
<br><br>
<a href="./mainPage">목록으로</a>
</body>
</html>
게시글 수정 및 삭제 버튼 생성
✍ views/board/readContentPage.jsp
로그인에 성공하고 본인이 이 게시글의 작성자일 경우 게시글 상세보기 시 수정, 삭제 버튼이 있어야 한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>게시글 상세 보기</h1>
제목 : ${data.boardDto.title} <br>
작성자 : ${data.memberDto.nickname} <br>
작성일 : ${data.boardDto.reg_date} <br>
조회수 : ${data.boardDto.read_count} <br>
내용 : <br>
${data.boardDto.content}
<br><br>
<a href="./mainPage">목록으로</a>
<c:if test="${!empty sessionUser && sessionUser.id == data.memberDto.id}">
<a href="./updatePage?id=${data.boardDto.id}">수정</a>
<a href="./deleteProcess?id=${data.boardDto.id}">삭제</a>
</c:if>
</body>
</html>
게시글 상세보기 페이지 다른 방식
✍ BoardController.java
@RequestMapping("{id}")
public String readContentPageForPathVariable(Model model, @PathVariable("id") int id) {
// 사실 int는 null 값이 선언되지 못하므로 null이면 터진다.
Map<String, Object> map = boardService.getBoard(id);
model.addAttribute("data", map);
return "board/readContentPage";
}
'Back-End > Spring' 카테고리의 다른 글
[Spring] 예제1 - 작성일 출력 형식 수정 (0) | 2023.05.18 |
---|---|
[Spring] 예제1 - 게시글 수정 및 삭제 구현 (0) | 2023.05.18 |
[Spring] 예제1 - 게시글 목록 출력하기 (0) | 2023.05.17 |
[Spring] 예제1 - 게시판 구현 (1) | 2023.05.17 |
[Spring] 예제1 - 메인 페이지 생성, 로그아웃 처리 (0) | 2023.05.16 |
Comments