백엔드/Spring Boot

타임리프

두개의 문 2023. 8. 4. 14:49

❶ Model 객체 이용하기

▪︎ HelloController.java

package org.choongang.ewha.hithymeleaf.controller;

import org.choongang.ewha.hithymeleaf.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import lombok.extern.slf4j.Slf4j;

@Slf4j		// 스프링에서 로그를 사용하기 쉽게 만든 인터페이스 
@Controller
public class HelloController {
	@GetMapping("/hello")
	public void hello(Model model) {
	
		log.info("{}", "/hello로 요청 들어옴");
		
		// * 웹 프로토콜의 상태관리(유지)를 위한 상태 트래킹용 공유 공간에 
		// 뷰로 전달할 데이터 임시 보관 
		// model.addAttribute("Key", "Value")
		model.addAttribute("username", "구름");
		model.addAttribute("age", 20);

• 라우터 주소매핑 메서드의 리턴값을 void로 지정할 경우, 요청 주소와 뷰템플릿 파일의 이름이 같아야 함 
  다만, 권장하지 않음 ( 보안 상의 이유로 파일 이름과 뷰 이름 다르게 설정하는 것 권장 )   

 

• Model

  - org.springframework.ui.Model ( MVC 패턴의 Model 아님 )

  - UI용 화면과 화면 사이 또는 화면과 controller 사이에 임시 데이터를 저장하기 위한 버퍼나 캐쉬같은 임시 메모리 공간 
 

 

 

▪︎ hello.html

<!DOCTYPE html>
<html xmlns="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--/*
	현재 문서의 경우, 순수 HTML 페이지인데 타임리프의 속성이 발견되면 thymeleaf 템플릿 기능이 추가됨 
	순수 HTML 페이지로 작동하다가 th:text와 같은 타임리프 속성 발견 시, 
	서버 쪽 뷰 템플릿 기능을 추가하는 식으로 동작함 (thymeleaf 뷰 템플릿을 선호하는 이유)
*/-->
<h1>이름 : <span th:text="${ username }">th:text 속성의 내용이 이 곳에 출력</span></h1>
<h1>나이 : <span th:text="${age}"></span></h1>

</body>
</html>

 

 

▪︎ 실행결과

 

 


❷ 스타일 적용시키기 

 

▪︎ HelloController.java

package org.choongang.ewha.hithymeleaf.controller;

import org.choongang.ewha.hithymeleaf.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import lombok.extern.slf4j.Slf4j;

@Slf4j		// 스프링에서 로그를 사용하기 쉽게 만든 인터페이스 
			// log4j logback 어떤 로그 라이브러리라도 slf4j 규격을 사용하면 
			// 동일 사용법을 적용 
@Controller
public class HelloController {
	@GetMapping("/hello")
	public void hello(Model model) {

		log.info("{}", "/hello로 요청 들어옴");
		
		// ... 생략 
        
		// * 스타일 적용 
		model.addAttribute("data1", "안녕하세요");
		model.addAttribute("data2", "<h1 style='color:green'>안녕하세요</h1>");
		
	}
}