티스토리 뷰

반응형

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

타임리프에서는 ${...} 라는 변수 표현식을 사용하여 변수를 사용한다 (선택 변수는 *{...} )

이 변수 표현식에는 SpringEL이라는 스프링이 제공하는 표현식을 사용할 수가 있다

 

SpringEL

Spring Expression Language라는 뜻의 SpringEL (SpEL)은 런타임 시 메서드 호출 및 기본 문자열 템플릿 등의 기능을 제공한다

#{"표현식"} , ${"프로퍼티"} 으로 사용한다 (자세한 내용은 추후에 다룰 예정)

(SpringEL 공식문서 링크 : https://docs.spring.io/spring-framework/docs/3.0.x/reference/expressions.html )

 

Thymeleaf Variable Expression : ${...}

기본적인 표현식은 너무 간단하니 설명은 생략 하겠다

<span th:text="${data}">Text</span>

 

Thymeleaf Variable with SpEL

SpEL(SpringEL)의 다양한 표현식을 사용할 수 있다

//서버쪽에서 아래와 같이 데이터가 넘어간다
@GetMapping("/variable")
public String variable(Model model) {
    User userA = new User("userA", 10); //username , age
    User userB = new User("userB", 20);

    List<User> list = new ArrayList<>();
    list.add(userA);
    list.add(userB);

    Map<String, User> map = new HashMap<>();
    map.put("userA", userA);
    map.put("userB", userB);

    model.addAttribute("user", userA); // Object(객체)로 전송
    model.addAttribute("users", list); // List로 전송
    model.addAttribute("userMap", map); // Map으로 전송

    return "basic/variable";
}

위와 같이 Object, List, Map으로 온 데이터를 SpringEL의 표현식을 통해 조회할 수 있다

<!-- Obejct -->
<span th:text="${user.username}"></span>
<span th:text="${user['username']}"></span>
<span th:text="${user.getUsername()}"></span>

<!-- List -->
<span th:text="${users[0].username}"></span>
<span th:text="${users[0]['username']}"></span>
<span th:text="${users[0].getUsername()}"></span>

<!-- Map -->
<span th:text="${userMap['userA'].username}"></span>
<span th:text="${userMap['userA']['username']}"></span>
<span th:text="${userMap['userA'].getUsername()}"></span>

• Object

user.username : user의 username 프로퍼티 접근 (=user.getUsername( ))

user['username'] : 첫 번째와 동일한 프로퍼티 접근 (=user.getUsername( ))

user.getUsername(): user의 getUsername() , getter 직접 호출

 

• List

users[0].username : List의 첫 번째에서 username 프로퍼티 접근 (=list.get(0).getUsername( ))

users[0]['username'] : 첫 번째와 동일한 프로퍼티 접근 (=list.get(0).getUsername( ))

users[0].getUsername : List의 첫 번째에서 getter 직접 호출

 

• Map

userMap['userA'].username : Map에서 userA라는 key값의 username 프로퍼티 접근 (=map.get("uesrA").getUsername))
userMap['userA']['username'] : 첫 번째와 동일한 프로퍼티 접근 (=map.get("uesrA").getUsername))

userMap['userA'].getUsername() : Map에서 userA라는 key값의 getter 직접 호출

 

Thymeleaf Select Variable Expression : *{...}

이전의 Context에 포함된 객체를 th:obejct로 선언하여 그 안에 있는 값들을 직접 선택하여 꺼낼 수 있다

<!-- user의 객체에 있는 name 과 age 값을 꺼낼 수 있음 -->
<div th:obejct="${user}">
    <span th:text="*{name}">username</span>
    <span th:text="*{age}">userage</span>
</div>

 

Local Variable (지역변수) : th:with

th:with을 사용하여 지역 변수를 선언할 수 있다, 하지만 지역 변수는 선언된 태그 안에서만 사용할 수 있다

<!-- 지역변수의 스코프는 선언된 해당 태그까지만이다 -->
<div th:with="local=${users[0]}">
	<span th:text="${local.username}"></span>
</div>

 

 

 

반응형
댓글