@Getter
@Setter
public class QuestionForm {
@NotEmpty(message = "제목은 필수 항목입니다.")
@Size(max = 50)
private String subject;
@NotEmpty(message = "내용은 필수입니다.")
private String content;
}
@PostMapping("/create")
public String questionCreate(@Valid QuestionForm questionForm,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "question_form";
}
questionService.create(questionForm.getSubject(), questionForm.getContent());
return "redirect:/question/list";
}
마찬가지로 answerForm을 만들고 답변 등록도 추가진행
@GetMapping("/detail/{id}")
public String detail(Model model, @PathVariable("id") Integer id,
AnswerForm answerForm) {
Question question = questionService.getQuestion(id);
model.addAttribute("question", question);
return "question_detail";
}
페이징을 위한 Testjpa 로 작성
@SpringBootTest
class SbbApplicationTests {
@Autowired
private QuestionService questionService;
@Test
void testJpa(){
for(int idx =1; idx <=300;idx++){
String subject = String.format("테스트 데이터 입니다:[%03d]",idx);
String content = "내용무";
questionService.create(subject,content);
}
}
}
QuestionRepository 페이징을 위한 findAll 추가
Page<Question> findAll(Pageable pageable);
QuestionService에서 repository에 만들 페이지 전제조회 메서드를 사용해서 페이지 번호를 입력받아 해당 페이지의 page 객체를 리턴하도록 진행.
public Page<Question> getList(int page){
Pageable pageable = PageRequest.of(page,10);
return questionRepository.findAll(pageable);
}
<ul class="pagination justify-content-center">
<li class="page-item" th:classappend="${!paging.hasPrevious} ? 'disabled'">
<a class="page-link"
th:href="@{|?page=${paging.number-1}|}">
<span>이전</span>
</a>
</li>
<li th:each="page: ${#numbers.sequence(0, paging.totalPages-1)}"
th:classappend="${page == paging.number} ? 'active'"
class="page-item">
<a th:text="${page}" class="page-link" th:href="@{|?page=${page}|}"></a>
</li>
<li class="page-item" th:classappend="${!paging.hasNext} ? 'disabled'">
<a class="page-link" th:href="@{|?page=${paging.number+1}|}">
<span>다음</span>
</a>
</li>
</ul>
최신 날짜 순 정렬 - Sort 함수 이용
public Page<Question> getList(int page){
List<Sort.Order> sort = new ArrayList<>();
sort.add(Sort.Order.desc("createDate"));
Pageable pageable = PageRequest.of(page,10,Sort.by(sort));
return questionRepository.findAll(pageable);
}
게시물 번호
답변 개수 표시하기
answer 부분에 manytoone lazy 추가
@ManyToOne(fetch = FetchType.LAZY)
private Question question;