[spring blog]5. 상세페이지

Mar 15, 2024
[spring blog]5. 상세페이지
 
 
기존에 제목1만 활성화 되어있던 페이지 4페이지까지 활성화 하기
BoardController
@GetMapping("/board/1") public String detail() { return "board/detail"; }
@GetMapping("/board/{id}") public String detail(@PathVariable int id) { System.out.println("id : "+id); return "board/detail";
 
작성자 넣기
detail.mustache
<div class="d-flex justify-content-end mt-2"> <b>작성자</b> : ssar </div>
notion image
 
qlrm 넣기
// https://mvnrepository.com/artifact/org.qlrm/qlrmimplementation group: 'org.qlrm', name: 'qlrm', version: '4.0.1'
 
notion image
 
오류난 부분 다시 import 하기(alt + enter)
 
File - project structure 21로 바꾸기
notion image
 
작성자 username 으로 받아오기
BoardResponse class 작성
package shop.mtcoding.blog.board; import lombok.Data; import java.sql.Timestamp; public class BoardResponse { // bt.id, bt.content, bt.title, bt.created_at, ut.id uid, ut.username @Data public static class DetailDTO { private int id; private String title; private String content; private int userId; private String username; private Timestamp createdAt; } }
 
BoardRepository
public BoardResponse.DetailDTO findById(int id) { // Entity가 아닌것은 jpa가 파싱 안해준다. Query query = em.createNativeQuery("select bt.id, bt.content, bt.title, bt.created_at, ut.user_id uid, ut.username from board_tb bt inner join user_tb ut on bt.user_id = ut.id where bt.id = ?"); query.setParameter(1, id); JpaResultMapper rm = new JpaResultMapper(); BoardResponse.DetailDTO responseDTO = rm.uniqueResult(query, BoardResponse.DetailDTO.class); return responseDTO; } }
 
BoardController
@GetMapping("/board/{id}") public String detail(@PathVariable int id, HttpServletRequest request) { BoardResponse.DetailDTO responseDTO = boardRepository.findById(id); request.setAttribute("board", responseDTO); return "board/detail"; }
 
detail.mustache
</div> <div class="d-flex justify-content-end mt-2"> <b>작성자</b> : {{board.username}} </div>
 
나타날 수 있는 오류
notion image
 
public BoardResponse.DetailDTO findById(int id) { // Entity가 아닌것은 jpa가 파싱 안해준다. Query query = em.createNativeQuery("select bt.id, bt.title, bt.content, bt.created_at, ut.username from board_tb bt inner join user_tb ut on bt.user_id = ut.id where bt.id = ?"); query.setParameter(1, id); JpaResultMapper rm = new JpaResultMapper(); BoardResponse.DetailDTO responseDTO = rm.uniqueResult(query, BoardResponse.DetailDTO.class); return responseDTO; }
 
DB에서 들고 온 정보는 다섯개 인데
public static class DetailDTO { private Integer id; private String title; private String content; private Timestamp createdAt; private Integer userId; private String username; }
BoardResponse에 있는 정보는 6개라서 발생한 오류
 
 
수정 삭제 버튼 안보이기
로그인을 안하면 안보임
 
BoardController
// 해당 페이지의 주인 여부 boolean owner = false; // 작성자 userId 확인하기 int boardUserId = responseDTO.getUserId(); // 로그인 여부 체크 User sessionUser = (User) session.getAttribute("sessionUser"); if (sessionUser != null ) { // 로그인 했음 if(boardUserId == sessionUser.getId()) { owner = true; } } request.setAttribute("owner", owner); return "board/detail";
 
 
Share article

Essential IT