[구현 화면]
[수정할 부분 요약]
1. Question에 category 추가하기
2. QuestionForm에서 category 추가하기
3. QuestionService에서 category 추가하기
4. QuestionController에서 create - category 및 modiefy-category 추가
5. question_form.html 카테고리 셀렉트 추가
6. question_list.html 카테고리 추가하기
[1단계 : Question에 category 추가하기 ]
private String category;
[2단계 : QuestionForm에 category 추가하기 ]
@NotBlank(message="선택해주세요")
private String category;
[3단계 : QuestionService에서 category 추가하기 ]
*2가지 영역에 추가하기
*DB에 저장함
public void create(String subject, String content, SiteUser user, String category){
Question q=new Question();
q.setSubject(subject);
q.setContent(content);
q.setCreateDate(LocalDateTime.now());
q.setAuthor(user);
q.setCategory(category);
this.questionRepository.save(q);
}
public void modify(Question question, String subject, String content, String category) {
question.setSubject(subject);
question.setContent(content);
question.setModifyDate(LocalDateTime.now());
question.setCategory(category);
this.questionRepository.save(question);
}
[4단계 : QuestionConroller에 category 추가하기 ]
* 총 3개의 영역을 추가해야한다.
@PreAuthorize("isAuthenticated()")
@PostMapping("/create")
public String questionCreate(@Valid QuestionForm questionForm, BindingResult bindingResult, Principal principal) {
if (bindingResult.hasErrors()) {
return "question_form";
}
SiteUser siteUser=this.userService.getUser(principal.getName());
this.questionService.create(questionForm.getSubject(), questionForm.getContent(), siteUser, questionForm.getCategory());
return "redirect:/question/list";
}
@PreAuthorize("isAuthenticated()")
@GetMapping("/modify/{id}")
public String questionModify(QuestionForm questionForm, @PathVariable("id") Integer id, Principal principal) {
Question question=this.questionService.getQuestion(id);
if(!question.getAuthor().getUsername().equals(principal.getName())) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "수정권한이 없습니다.");
}
questionForm.setSubject(question.getSubject());
questionForm.setContent(question.getContent());
questionForm.setContent(question.getCategory());
return "question_form";
}
@PreAuthorize("isAuthenticated()")
@PostMapping("/modify/{id}")
public String questionModify(@Valid QuestionForm questionForm, BindingResult bindingResult,
Principal principal, @PathVariable("id") Integer id) {
if (bindingResult.hasErrors()) {
return "question_form";
}
Question question = this.questionService.getQuestion(id);
if (!question.getAuthor().getUsername().equals(principal.getName())) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "수정권한이 없습니다.");
}
this.questionService.modify(question, questionForm.getSubject(), questionForm.getContent(), questionForm.getCategory());
return String.format("redirect:/question/detail/%s", id);
}
[5단계 : qustion_form.html 파일에 category 추가하기 ]
*셀렉트를 사용하여 카테고리를 생성하였다.
<div class="mb-3">
<select th:field="*{category}" class="form-select">
<option value="">카테고리를 선택해주세요</option>
<option value="가입인사">가입인사</option>
<option value="등업요청">등업요청</option>
<option value="자유게시판">자유게시판</option>
</select>
</div>
제목위에 추가
[6단계 : qustion_list.html 파일에 category 추가하기 ]
질문 리스트에서 카테고리 열과 데이터를 보여줄 행을 추가하였다.
table class="table">
<thead class="table-dark">
<tr class="text-center">
<th>번호</th>
<th style="width:50%">제목</th>
<th>카테고리</th>
<th>글쓴이</th>
<th>작성일시</th>
</tr>
</thead>
<tbody>
<tr class="text-center" th:each="question, loop : ${paging}">
<td th:text="${paging.getTotalElements - (paging.number * paging.size) - loop.index}"></td>
<td class="text-start">
<a th:href="@{|/question/detail/${question.id}|}" th:text="${question.subject}"></a>
<span class="text-danger small ms-2"
th:if="${#lists.size(question.answerList) > 0}"
th:text="${#lists.size(question.answerList)}">
</span>
</td>
<td><span th:text="${question.getCategory()}"></span></td>
<td><span th:if="${question.author != null}" th:text="${question.author.username}"></span></td>
<td th:text="${#temporals.format(question.createDate, 'yyyy-MM-dd HH:mm')}"></td>
</tr>
</tbody>
</table>
[완성]
[게시판 동작 순서]
'2.프레임워크 > Spring Boot' 카테고리의 다른 글
[스트링부트] 게시판 첨부파일 기능 구현하기 (0) | 2024.01.31 |
---|---|
[스프링부트] 게시판 조회수 추가하기 (0) | 2024.01.24 |
[스프링부트] 게시판 만들기 - 페이지 0이 아닌 1번 부터 출력 변경하기 (0) | 2024.01.22 |
[스프링부트] 게시판 만들기 [1] - 프로젝트 구조 이해 및 기초 개념 (1) | 2024.01.11 |