All of My Records

[Spring Boot] Thymeleaf 타임리프 템플릿 사용하기 (3) :: Thymeleaf 변수 표현식 및 선택 변수 표현식

by 캐떠린

변수 표현식(Variable Expression) 및 선택 변수 표현식(Selection Variable Expression)

  • Variable Expressions, 변수 표현식 '${...}'
  • Selection Variable Expression, 선택 변수 표현식 '*{...}'

 

타임리프 템플릿 사용하기 (1)에서 작업해놓은 프로젝트에 이어서 작업하기

 

[Spring Boot] Thymeleaf 타임리프 템플릿 사용하기 (1) :: Thymeleaf 표현식 및 변수 표현식

Thymeleaf란? JSP + EL + JSTL이 합쳐진 역할 템플릿 엔진 화면을 출력하는 담당(view 제작) 학습 목적: JSP를 사용하지 않고 Thymeleaf를 사용하기 위해! Thymeleaf, Freemarker, Mustache, Groovy 등.. 여러 종류의 템플

pigsnowworld.tistory.com

 

1. TestMapper.xml : Mapper 기본 설정

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.thymeleaf.mapper.TestMapper">

</mapper>

 

2. TestDTO.java

package com.test.thymeleaf.domain;

import lombok.Data;

@Data
public class TestDTO {
	private String title;
	private String author;
	private String discount;
}

 

3. ThymeleafApplication.java : 메인 클래스에 MapperScan 추가하기

package com.test.thymeleaf;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages = "com.test.thymeleaf.mapper")
public class ThymeleafApplication {

	public static void main(String[] args) {
		SpringApplication.run(ThymeleafApplication.class, args);
	}

}

 

MapperScan(basePackages="") 에 추가해야만 mapper 패키지를 찾아서 인터페이스를 쿼리 날릴 수 있는 담당자로 인식한다.

 

4. TestController.java

@Controller
public class TestController {

	@Autowired
	private TestMapper mapper; //DB
	
	@Autowired
	private TestDAO dao; //HashMap

	@GetMapping(value = "/m2.do")
	public String m2(Model model) {
		
		//객체 반환(map/obj)
		model.addAttribute("map", dao.get());
		model.addAttribute("dto", mapper.get());
		
		return "m2";
	}
}

 

5. TestDAO.java

package com.test.thymeleaf.repository;

import java.util.HashMap;

import org.springframework.stereotype.Repository;

@Repository
public class TestDAO {

	public HashMap<String, Integer> get() {

		HashMap<String, Integer> map = new HashMap<String, Integer>();
		
		map.put("kor", 100);
		map.put("eng", 90);
		map.put("math", 80);
		
		return map;
	}

}

 

6. TestMapper.java

package com.test.thymeleaf.mapper;

import com.test.thymeleaf.domain.TestDTO;

public interface TestMapper {

	TestDTO get();

}

 

7. TestMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.test.thymeleaf.mapper.TestMapper">

	<select id="get" resultType="com.test.thymeleaf.domain.TestDTO">
		select title, author, discount from tblBook
			where seq = 5
	</select>

</mapper>

 

8. m2.html

<!DOCTYPE html>
<html xmlns:th="https://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="https://me2.do/5BvBFJ57">
</head>
<body>
	<h1>Thymeleaf <small>객체 출력</small></h1>
	
	<h2>Map</h2>
	<div th:text="${map}"></div>
	<ul>
		<li th:text="${map.get('kor')}"></li>
		<li th:text="${map.kor}"></li>
		<li th:text="${map.eng}"></li>
		<li th:text="${map.math}"></li>
	</ul>
	
	<h2>DTO</h2>
	<div th:text="${dto}"></div>
	<ul>
		<li th:text="${dto.getTitle()}"></li>
		<li th:text="${dto.title}"></li>
		<li th:text="${dto.author}"></li>
		<li th:text="${dto.discount}"></li>
	</ul>
	
	<hr>
	
	<!-- 선택 변수 표현식 -->
	<h3>선택 변수 표현식</h3>
	<ul th:object="${map}">
		<li th:text="*{kor}"></li>
		<li th:text="*{eng}"></li>
		<li th:text="*{math}"></li>
	</ul>
	<ul th:object="${dto}">
		<li th:text="*{title}"></li>
		<li th:text="*{author}"></li>
		<li th:text="*{discount}"></li>
	</ul>
	
	
</body>
</html>

 

 

번외. m2.html : 선택 변수 표현식 테스트 해보며 익히기

<hr>
	
<div>테스트</div>
<div th:text="*{title}"></div> <!-- X -->
<div th:text="*{kor}"></div> <!-- X -->

<br>

<div th:object="${dto}"> <!-- O -->
	<div th:text="*{title}"></div>
</div>

<div th:object="${map}"> <!-- O -->
	<div th:text="*{kor}"></div>
</div>

<br>

<div th:object="${dto}"></div> <!-- X -->
<div th:text="*{author}"></div>

 

 

★결론★: 선택 변수 표현식을 사용하기 위해서는 부모 태그에 th:object 속성을 사용하여 서버에서 보내는 객체명을 적어줘야하고, 자식 태그에 th:text 등의 속성을 사용하여 변수명을 적어줘야만 원하는 값을 정상적으로 출력할 수 있다.

 

*글 작성에 참고한 내용: 학원 쌤의 열정적인 수업

블로그의 정보

All of My Records

캐떠린

활동하기