[SpringBoot] 상세 페이지 만들기(URL에서 자바 객체값 사용)
2024. 8. 31. 10:22ㆍ자바 웹 개발/스프링부트
질문 목록의 제목을 클릭하면 상세 페이지가 호출되도록 제목에 링크를 추가해보기 위해 .question_list.html을 수정해보자.
<table>
<thead>
<tr>
<th>제목</th>
<th>작성일시</th>
</tr>
</thead>
<tbody>
<tr th:each="question, index : ${questionList}">
<td>
<a th:href="@{|/question/detail/${question.id}|}"
th:text="${question.subject}"></a>
</td>
<td th:text="${question.createDate}"></td>
</tr>
</tbody>
</table>
URL을 연결하기 위해 th:href 속성을 사용한다. URL은 반드시 @{와 } 사이에 입력해야한다. 자바의 객체 값을 더할 때에는 반드시 | |로 감싸주어야 한다.
변하는 id값을 얻기 위해서 QuestionController을 다음과 같이 수정한다.
@GetMapping(value = "/detail/{id}")
public String detail(Model model, @PathVariable("id") Integer id){
return "question_detail";
}
@PathVariable과 @GetMapping에서 사용하는 값이 동일해야한다.
id값으로 질문 데이터를 조회하기 위해 getQuestion메서드를 QuestionService에 추가해보자.
public Question getQuestion(Integer id){
Optional<Question> question = this.questionRepository.findById(id);
if(question.isPresent()){
return question.get();
} else {
throw new DataNotFoundException("question not found");
}
}
질문 데이터가 없을 경우에는 예외 클래스를 실행하도록 했다.
QuestionController로 돌아가 QuestionService의 getQuestion 메서드를 호출하여 Qeustion 객체를 템플릿에 전달하도록 한다.
@GetMapping(value = "/detail/{id}")
public String detail(Model model, @PathVariable("id") Integer id){
Question question = this.questionService.getQuestion(id);
model.addAttribute("question", question);
return "question_detail";
}
Model 객체에 question 이름으로 객체를 저장했으므로 다음과 같이 할 수 있다.
<h1 th:text="${question.subject}"></h1>
<div th:text="${question.content}"></div>
'자바 웹 개발 > 스프링부트' 카테고리의 다른 글
[SpringBoot] URL 프리픽스 (0) | 2024.08.31 |
---|---|
[SpringBoot] 서비스 만들기 (0) | 2024.08.31 |
[SpringBoot] 루트 URL 사용하기 (0) | 2024.08.31 |
[SpringBoot] 템플릿 설정 (0) | 2024.08.28 |
[SpringBoot] 리포지터리 데이터베이스 관리 기본 기능 (0) | 2024.08.27 |