점프 투 스프링부트 | 2장 Thymeleaf, 루트 URL

5w31892p·2022년 12월 29일
0

Spring

목록 보기
19/30

:: Thymeleaf

  • 템플릿 엔진
    • 템플릿 : 자바 코드를 삽입할 수 있는 HTML 형식의 파일

데이터 조회하여 템플릿에 전달하기 (java)

  • Model 객체는 자바 클래스와 템플릿 간의 연결고리 역할
  • Model 객체에 값 담아두면 템플릿에서 사용한다.
  • addAttribute(String name, Object value) : Model에 데이터를 담을 때 사용하는 메소드
@GetMapping("/question/list")
public String list(Model model) {
    List<Question> questionList = this.questionRepository.findAll();
    model.addAttribute("questionList", questionList);
    return "question_list";
}

템플릿에서 전달받은 데이터 사용하기 (html)

  • th: : 자바코드와의 연결고리!
  • th:each : 요소 반복하기, foreach문 같은..
    • <tr th:each="variable : ${list}">
    • th:each=" 객체 : ${addAttribute로 담은 데이터list}"
  • th:text : 태그 안의 텍스트를 서버에서 전달 받은 값에 따라 표현
    • th:text="${변수.속성}"
<tr th:each="question : ${questionList}"> // 가져온 리스트를 반복
    <td th:text="${question.subject}"></td> // 텍스트는 question의 subject을 적고
    <td th:text="${question.createDate}"></td> // 여긴 question의 reateDate을 적는다.
</tr>

:: 타임리프 속성

1. 분기문 속성

  • question 객체가 null이 아닌 경우에 표시.
th:if="${question != null}"

2. 반복문 속성

  • 자바의 for each와 유사
th:each="question : ${questionList}"
  • loop 객체 추가
th:each="question, loop : ${questionList}"

loop 객체 속성

  • loop.index - 반복 순서, 0부터 1씩 증가
  • loop.count - 반복 순서, 1부터 1씩 증가
  • loop.size - 반복 객체의 요소 갯수 (예: questionList의 요소 갯수)
  • loop.first - 루프의 첫번째 순서인 경우 true
  • loop.last - 루프의 마지막 순서인 경우 true
  • loop.odd - 루프의 홀수번째 순서인 경우 true
  • loop.even - 루프의 짝수번째 순서인 경우 true
  • loop.current - 현재 대입된 객체 (예: 위의 경우 question과 동일)

3. 텍스트 속성

  • th:text=값 : 텍스트로 해당 값을 출력
th:text="${question.subject}"

cf. th:text 대신 대괄호 사용해서 값 직접 출력도 가능하다.

<td>[[${question.subject}]]</td>

:: 루트 URL

  • 도메인 명과 포트 뒤에 아무것도 붙지 않은 URL
  • 따로 매핑 만들지 않으면 -> 404
  • 그러므로 지정해주는 것이 좋다.
@GetMapping("/")
public String root() {
    return "redirect:/question/list";
}

스프링부트는 리다이렉트 또는 포워딩을 할 수 있다.
redirect:<URL> : URL로 리다이렉트 (리다이렉트는 완전히 새로운 URL로 요청이 된다.)

forward:<URL> : URL로 포워드 (포워드는 기존 요청 값들이 유지된 상태로 URL이 전환된다.)

0개의 댓글