728x90
출처:
https://www.youtube.com/watch?v=ZNrRqthcZyk&list=PL93mKxaRDidECgjOBjPgI3Dyo8ka6Ilqm&index=58
package com.cosblog.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import com.cosblog.service.BoardService;
import org.springframework.data.domain.Sort;
@Controller
public class BoardController {
@Autowired
private BoardService boardService;
//public String index(@AuthenticationPrincipal PrincipalDetail principal)
@GetMapping({"","/"})
public String index(Model model,@PageableDefault(size=3, sort="id", direction = Sort.Direction.DESC)Pageable pageable) {
model.addAttribute("boards", boardService.글목록(pageable));
return "index"; // viewResolver 작동!
}
@GetMapping("board/{id}")
public String findById(@PathVariable int id, Model model) {
model.addAttribute("board", boardService.글상세보기(id));
return "board/detail";
}
@GetMapping("/board/saveForm")
public String saveForm() {
return "board/saveForm";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="layout/header.jsp"%>
<div class="container">
<c:forEach var="board" items="${boards.content}">
<div class="card m-2">
<div class="card-body">
<h4 class="card-title">${board.title}</h4>
<a href="/board/${board.id}" class="btn btn-primary">상세보기</a>
</div>
</div>
</c:forEach>
<ul class="pagination justify-content-center">
<c:choose>
<c:when test="${boards.first}">
<li class="page-item disabled"><a class="page-link" href="?page=${boards.number-1}">Previous</a></li>
</c:when>
<c:otherwise>
<li class="page-item"><a class="page-link" href="?page=${boards.number-1}">Previous</a></li>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${boards.last}">
<li class="page-item disabled"><a class="page-link" href="?page=${boards.number+1}">Next</a></li>
</c:when>
<c:otherwise>
<li class="page-item"><a class="page-link" href="?page=${boards.number+1}">Next</a></li>
</c:otherwise>
</c:choose>
</ul>
</div>
<%@ include file="layout/footer.jsp"%>
package com.cosblog.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.cosblog.model.Board;
import com.cosblog.model.User;
import com.cosblog.repository.BoardRepository;
//스프링이 컴포넌트 스캔을 통해서 bean에 등록을 해줌
@Service
public class BoardService {
@Autowired
private BoardRepository boardRepository;
@Transactional
public void 글쓰기(Board board, User user) {
board.setCount(0);
board.setUser(user);
boardRepository.save(board);
}
public Page<Board> 글목록(Pageable pageable) {
return boardRepository.findAll(pageable);
}
public Board 글상세보기(int id) {
return boardRepository.findById(id)
.orElseThrow(()->{
return new IllegalArgumentException("글 상세보기 실패:아이디를 찾을 수 없습니다.");
});
}
/*
* 이 로그인도 사용 안 할거라 삭제
*
* @Transactional(readOnly = true)//Select할 때 트랜잭션 시작, 서비스 종료시에 트랜잭션 종료(정합성)
* public User 로그인(User user) { return
* userRepository.findByUsernameAndPassword(user.getUsername(),
* user.getPassword()); }
*/
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="../layout/header.jsp"%>
<div class="container">
<button class="btn btn-secondary" onclick="history.back()">돌아가기</button>
<button id="btn-update" class="btn btn-warning">수정</button>
<button id="btn-delete" class="btn btn-danger">삭제</button>
<br><br>
<div>
<h3>${board.title}</h3>
</div>
<hr />
<div>
<div>${board.content}</div>
</div>
<hr />
<button id="btn-save" class="btn btn-primary">글 저장</button>
</div>
<script src="/js/board.js"></script>
<%@ include file="../layout/footer.jsp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="../layout/header.jsp"%>
<div class="container">
<form action="/auth/loginProc" method="POST">
<div class="form-group">
<label for="email">Title</label> <input type="text" class="form-control" placeholder="Enter title" id="title">
</div>
<div class="form-group">
<label for="comment">Content:</label>
<textarea class="form-control summernote" rows="5" id="content"></textarea>
</div>
</form>
<button id="btn-save" class="btn btn-primary">글 저장</button>
</div>
<!-- summer note -->
<script>
$('.summernote').summernote({
tabsize : 2,
height : 300
});
</script>
<script src="/js/board.js"></script>
<%@ include file="../layout/footer.jsp"%>
728x90
'Spring > Spring boot' 카테고리의 다른 글
스프링부트 강좌 58강(블로그 프로젝트) - 글 수정하기 (0) | 2022.01.25 |
---|---|
스프링부트 강좌 57강(블로그 프로젝트) - 글 삭제하기 (0) | 2022.01.25 |
스프링부트 강좌 55강(블로그 프로젝트) - 글목록 페이징하기 (0) | 2022.01.25 |
스프링부트 강좌 54강(블로그 프로젝트) - 글목록보기 (0) | 2022.01.25 |
스프링부트 강좌 53강(블로그 프로젝트) - 글쓰기 완료 (0) | 2022.01.24 |
댓글