티스토리 뷰

반응형

(참고: Spring Boot를 기준으로 작성된 글입니다)

타임리프에서 다양한 객체 값들을 바인딩하는 방법들을 정리해보고자 한다

 

아래와 같이 객체를 생성하였다, 이 객체를 다양한 방식으로 전송하여 타임리프에서 어떻게 꺼내볼 수 있는지 방법별로 살펴보자

@Data
public class UserDTO {
    private String name;
    private int age;
}

 

Object (객체)

- 서버

@Controller
public class ExampleController {

    @GetMapping("/objects")
    public String objBinding(Model model) {
    UserDTO userDTO = new UserDTO();
    userDTO.setName("userA");
    userDTO.setAge(20);
    
    model.addAttribute("userDTO", userDTO);
    
    return "/objects/objExam";
    }
}

- 타임리프

<span th:text="${userDTO.name}">username</span>
<span th:text="${userDTO.age}">userage</span>

 

List<> Object (리스트 객체)

- 서버

@Controller
public class ExampleController {

    @GetMapping("/objects/list")
    public String objBinding(Model model) {
    UserDTO userDTO = new UserDTO();
    List<UserDTO> list = new ArrayList<>();
    list.add(new UserDTO("userA", 10));
    list.add(new UserDTO("userB", 20));
    
    model.addAttribute("userList", list);
    
    return "/objects/listExam";
    }
}

- 타임리프

//Spring EL 사용
<span th:text="${list[0].name}"></span>

//반복문 사용
<tr th:each="userList : ${list}">
	<td th:text="${userList.name}"></td>
    <td th:text="${userList.age}"></td>
</tr>

 

Map<Key, Value> Object (맵<key,value> 형식 객체)

-서버

@Controller
public class ExampleController {

    @GetMapping("/objects/map")
    public String objBinding(Model model) {
    UserDTO userA = new UserDTO("userA", 10);
    UserDTO userB = new UserDTO("userB", 20);
    
    Map<String, UserDTO> map = new HashMap<>();
    map.put("userA", userA);
    map.put("userB", userB);
    
    model.addAttribute("userMap", map);
    
    return "/objects/mapExam";
    }
}

-타임리프

//Spring EL 사용
<span th:text="${userMap['userA'].name}">username</span>

//반복문 사용
<tr th:each="map : ${userMap}">
	<td th:text="${map.key}"></td>
    <td th:text="${map.value}"></td>
</tr>

 

Map<Ket, List> Object (맵<key,list> 형식 객체)

-서버

@Controller
public class ExampleController {

    @GetMapping("/objects/mapList")
    public String objBinding(Model model) {
    UserDTO userA = new UserDTO("userA", 10);
    UserDTO userB = new UserDTO("userB", 20);
    
    List<UserDTO> listA = new ArrayList<>();
    List<UserDTO> listB = new ArrayList<>();
    list.add(userA);
    list.add(userB);
    
    Map<String, List<UserDTO>> map = new HashMap<>();
    map.put("keyA", listA);
    map.put("keyB", listB);
    
    model.addAttribute("mapList", map);
    
    return "/objects/mapListExam";
    }
}

-타임리프

//반복문 사용
<tr th:each="map : ${mapList}">
	<td th:text="${mapStat.count}">mapcount</td>
    <td th:text="${map.key}">mapkey</td>
    <td>
    	<tr th:each="list : ${map.value}">
        <td th:text="${list.name}">username</td>
        <td th:text="${list.age}">userage</td>
    </td>
</tr>

 

 

 

더보기

개인 학습을 위해 작성되는 글입니다.

제가 잘못 알고 있는 점에 대한 지적 / 더 나은 방향에 대한 댓글을 환영합니다.

 

참조 링크:

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard

https://amagrammer91.tistory.com/33

 

 

반응형

'WEB > Template Engine' 카테고리의 다른 글

[Thymeleaf] Comments (주석)  (0) 2021.09.02
[Thymeleaf] Conditional Evaluation (조건부 평가)  (0) 2021.09.01
[Thymeleaf] Iteration (반복)  (0) 2021.09.01
[Thymeleaf] Attribute (속성)  (0) 2021.09.01
[Thymeleaf] Operations (연산)  (0) 2021.09.01
댓글