점프 투 스프링부트를 참고하여 학습,작성하였습니다.
1.질문 목록 URL 매핑
질문 목록 List가 나올 URL을 매핑한다.
question_list.html으로 매핑하기 위해 템플릿 파일 이름 question_list를 리턴한다.
@GetMapping("/question/list")
public String list() {
return "question_list";
}
2.템플릿 설정
이제 자바 코드를 삽입할 수 있는 HTML 형식의 파일인 템플릿을 만들기 위해 템플릿 엔진 의존성을 pom.xml에 추가한다.
<!--템플릿엔진 Thyleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
tamplates 폴더에 question_list.html을 만든다.
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─example
│ │ │ │ DemoApplication.java
│ │ │ │
│ │ │ ├─controller
│ │ │ │ MyController.java
│ │ │ │
│ │ │ ├─model
│ │ │ │ Answer.java
│ │ │ │ Question.java
│ │ │ │
│ │ │ └─repository
│ │ │ AnswerRepository.java
│ │ │ QuestionRepository.java
│ │ │
│ │ └─resources
│ │ │ application.properties
│ │ │
│ │ ├─static
│ │ │ index.html
│ │ │
│ │ └─templates
│ │ question_list.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>asdasdasd</h1>
</body>
</html>
3.데이터를 템플릿에 전달
QuestionController.java를 수정한다.
우선 QuestionRepository,Question를 import 하고
java.util에서 List 클래스
org.springframework.ui 패키지에서 Model 인터페이스를 import (컨트롤러가 뷰에 데이터를 전달하는 데 사용)
클래스의 필드를 기반으로 생성자를 자동으로 생성해주는 @RequiredArgsConstructor를 import 한다.
import com.example.repository.QuestionRepository;
import com.example.model.Question;
import java.util.List;
import org.springframework.ui.Model;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor를 사용하여 questionRepository 객체에 final이 붙은 속성을 포함하는 생성자를 자동으로 만들어 준다.
Model객체를 매개변수로 받은후
questionRepository.findAll() 메서드를 통해 모든 질문 리스트를 가져온다.
model.addAttribute("questionList", questionList)를 통해 questionList를 모델에 추가하여 뷰로 전달한다.
("questionList"는 뷰에서 사용할 이름, questionList는 컨트롤러에서 가져온 데이터)
@RequiredArgsConstructor
@Controller
public class QuestionController {
private final QuestionRepository questionRepository;
@GetMapping("/question/list")
public String list(Model model) {
List<Question> questionList = this.questionRepository.findAll();
model.addAttribute("questionList", questionList);
return "question_list";
}
}
만약 @RequiredArgsConstructor를 사용안했으면 다음 코드가 추가되야한다. (final이므로)
public QuestionController(QuestionRepository questionRepository) {
this.questionRepository = questionRepository;
}
4.템플릿 수정
템플릿에 데이터를 받아와서 테이블을 작성한다.
${questionList} : Spring MVC 컨트롤러에서 모델에 추가한 questionList 변수 (Thymeleaf의 표현식 문법)
th:each="question : ${questionList}": questionList의 각 요소를 순회하면서 question 변수에 담는다.
(Thymeleaf의 반복문 문법)
${question.subject} : question 객체의 subject 필드 값을 출력
${question.createDate}: question 객체의 createDate 필드 값을 출력
<table>
<thead>
<tr>
<th>제목</th>
<th>작성일시</th>
</tr>
</thead>
<tbody>
<tr th:each="question : ${questionList}">
<td th:text="${question.subject}"></td>
<td th:text="${question.createDate}"></td>
</tr>
</tbody>
</table>
5.타임리프 속성
- th:text="${message}" : 텍스트 내용
- th:each="item : ${items}" : 반복문
- th:if="${loggedIn}" th:text="${username}": 조건문(${loggedIn}이 true일 경우에만 <p> 요소가 생성)
- th:href="@{/profile/{id}(id=${userId})}" : href 속성 설정
- th:src="@{/images/logo.png}" : src 속성 설정
'BackEnd > SpringBoot' 카테고리의 다른 글
[Spring Boot] 루트 URL (0) | 2024.07.01 |
---|---|
[Spring Boot] 리포지터리 수정,삭제 (0) | 2024.07.01 |
[Spring Boot] 리포지터리 데이터 조회 (0) | 2024.07.01 |