//question_detail.html
<h1 th:text="${question.subject}"></h1>
<div th:text="${question.content}"></div>
<h5 th:text="|${#lists.size(question.answerList)}개의 답변이 있습니다.|"></h5>
<div>
<ul>
<li th:each="answer : ${question.answerList}" th:text="${answer.content}"></li>
</ul>
</div>
<form th:action="@{|/answer/create/${question.id}|}" method="post">
<textarea name="content" id="content" rows="15"></textarea>
<input type="submit" value="답변등록">
</form>
#: Thymeleaf의 내장 함수나 객체에 접근하기 위한 특수한 기호
//AnswerController.java
package com.mysite.sbb.answer;
import com.mysite.sbb.question.Question;
import com.mysite.sbb.question.QuestionService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@RequestMapping("/answer")
@RequiredArgsConstructor
@Controller
public class AnswerController {
private final QuestionService questionService;
private final AnswerService answerService;
@PostMapping("/create/{id}")
public String createAnswer(Model model, @PathVariable("id") Integer id,
@RequestParam(value = "content") String content) {
Question question = this.questionService.getQuestion(id);
this.answerService.create(question, content); //답변을 저장할 수 있게됨
return String.format("redirect:/question/detail/%s", id);
}
}
//AnswerService.java
package com.mysite.sbb.answer;
import com.mysite.sbb.question.Question;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@RequiredArgsConstructor
@Service
public class AnswerService {
private final AnswerRepository answerRepository;
public void create(Question question, String content) { //question 객체, 내용
Answer answer = new Answer();
answer.setContent(content); //내용
answer.setCreateDate(LocalDateTime.now()); //작성시간
answer.setQuestion(question); //객체 자체를 담음
this.answerRepository.save(answer);
}
}
화면의 디자인
CSS 파일은 HTML 파일과 달리 static 디렉터리에 저장해야 한다.
src/main/resources → static → New → File → style.css
textarea {
width: 100%;
}
input[type=submit] {
margin-top: 10px;
}
html와 css 연결