코드 그라데이션
Thymeleaf (12) 자바스크립트 인라인 본문
자바스크립트 인라인
타임리프는 자바스크립트에서 타임리프를 편리하게 사용할 수 있는 자바스크립트 인라인 기능을 제공한다.
자바스크립트 인라인 기능은 다음과 같이 적용하면 된다.
<script th:inline="javascript">
BasicController 추가
@GetMapping("/javascript")
public String javascript(Model model) {
model.addAttribute("user", new User("userA", 10));
addUsers(model);
return "basic/javascript";
}
/resources/templates/basic/javascript.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- 자바스크립트 인라인 사용 전 -->
<!--
이 부분은 자바스크립트 코드를 포함하는 부분입니다.
Thymeleaf 표현식을 자바스크립트 변수에 할당하고 있습니다.
- var username = [[${user.username}]]: Thymeleaf 표현식을 이용해 사용자의 이름을 가져와 자바스크립트 변수 username에 할당합니다.
- var age = [[${user.age}]]: 사용자의 나이를 가져와 자바스크립트 변수 age에 할당합니다.
- var username2 = /*[[${user.username}]]*/ "test username";: Thymeleaf의 내추럴 템플릿 주석을 사용하여 주석 처리된 부분입니다. 주석 내의 표현식은 주석 처리되며, 대신에 "test username" 문자열이 변수 username2에 할당됩니다.
- var user = [[${user}]]: 사용자 객체를 자바스크립트 변수 user에 할당합니다.
-->
<script>
var username = [[${user.username}]];
var age = [[${user.age}]];
//자바스크립트 내추럴 템플릿
var username2 = /*[[${user.username}]]*/ "test username";
//객체
var user = [[${user}]];
</script>
<!-- 자바스크립트 인라인 사용 후 -->
<!--
이 부분은 자바스크립트 코드를 포함하는 부분입니다.
Thymeleaf의 th:inline="javascript" 속성을 사용하여 자바스크립트 인라인 모드로 작성되었습니다.
이 모드에서는 Thymeleaf 표현식을 직접 사용할 수 있습니다.
- var username = [[${user.username}]]: Thymeleaf 표현식을 이용해 사용자의 이름을 가져와 자바스크립트 변수 username에 할당합니다.
- var age = [[${user.age}]]: 사용자의 나이를 가져와 자바스크립트 변수 age에 할당합니다.
- var username2 = /*[[${user.username}]]*/ "test username";: 주석 처리된 부분을 주석 해제하고 사용자의 이름을 가져와 변수 username2에 할당합니다.
- var user = [[${user}]]: 사용자 객체를 자바스크립트 변수 user에 할당합니다.
-->
<script th:inline="javascript">
var username = [[${user.username}]];
var age = [[${user.age}]];
//자바스크립트 내추럴 템플릿
var username2 = /*[[${user.username}]]*/ "test username";
//객체
var user = [[${user}]];
</script>
</body>
</html>
자바스크립트 인라인 사용 전 결과
<script>
var username = userA;
var age = 10;
//자바스크립트 내추럴 템플릿
var username2 = /*userA*/ "test username";
//객체
var user = BasicController.User(username=userA, age=10);
</script>
자바스크립트 인라인 사용 후 결과
<script>
var username = "userA";
var age = 10;
//자바스크립트 내추럴 템플릿
var username2 = "userA";
//객체
var user = {"username":"userA","age":10};
</script>
</body>
</html>
자바스크립트 인라인 사용 전
: 자바스크립트 코드 내에서 Thymeleaf 표현식을 사용하려면 주석 내에 변수 할당 및 표현식을 넣어야 한다.
이 경우, 내추럴 템플릿 주석을 사용하여 주석 처리된 부분에서도 주석 내부의 표현식을 활용할 수 있다.
자바스크립트 인라인 사용 후
: th:inline="javascript" 속성을 사용하여 자바스크립트 인라인 모드로 작성하면, Thymeleaf 표현식을 직접 사용할 수 있다.
이 모드에서는 주석 내부의 Thymeleaf 표현식을 그대로 활용할 수 있다.
텍스트 렌더링
자바스크립트 내추럴 템플릿
- 타임리프는 HTML 파일을 직접 열어도 동작하는 내추럴 템플릿 기능을 제공한다.
- 자바스크립트 인라인 기능을 사용하면 주석을 활용해서 이 기능을 사용할 수 있다.
객체
- 타임리프의 자바스크립트 인라인 기능을 사용하면 객체를 JSON으로 자동으로 변환해준다.
자바스크립트 인라인 each
- 자바스크립트 인라인은 each를 지원하는데, 다음과 같이 사용한다.
/resources/templates/basic/javascript.html 에 추가
<!-- 자바스크립트 인라인 each -->
<script th:inline="javascript">
[# th:each="user, stat : ${users}"]
var user[[${stat.count}]] = [[${user}]];
[/]
</script>
주석 추가 ver.
<!-- 자바스크립트 인라인 each -->
<script th:inline="javascript">
[# th:each="user, stat : ${users}"]
/*
Thymeleaf에서 자바스크립트 인라인 모드로 설정한 부분입니다.
이 부분은 Thymeleaf의 th:each 디렉티브를 사용하여 사용자 목록(${users})을 반복하고, 각 사용자를 자바스크립트 변수로 할당하는 역할을 합니다.
반복할 때 stat 변수도 함께 사용되며, 각 반복 요소의 정보를 제공합니다.
*/
var user[[${stat.count}]] = [[${user}]];
/*
위 코드는 자바스크립트 변수를 생성하고, 변수 이름을 "user" 다음에 반복 카운트인 "stat.count"를 붙여 유니크하게 만듭니다.
이렇게 생성된 변수는 사용자 정보(${user})를 저장하게 됩니다.
*/
[/]
부연설명
[# th:each="user, stat : ${users}"]
: Thymeleaf의 th:each 디렉티브를 사용하여 ${users} 변수의 사용자 목록을 반복한다.
user는 현재 사용자를 나타내며, stat은 반복 상태 정보를 제공하는 변수이다.
var user[[${stat.count}]] = [[${user}]];
: 이 코드는 자바스크립트 변수를 생성하고, 변수 이름을 "user" 다음에 반복 카운트인 stat.count를 붙여
유니크하게 만든다.
이렇게 생성된 변수는 사용자 정보(${user})를 저장하게 된다.
실행 결과
'Spring > Thymeleaf' 카테고리의 다른 글
Thymeleaf (14) 템플릿 레이아웃 01 (0) | 2023.11.21 |
---|---|
Thymeleaf (13) 템플릿 조각 (0) | 2023.11.20 |
Thymeleaf (11) 블록 (0) | 2023.11.17 |
Thymeleaf (10) 주석 (0) | 2023.11.16 |
Thymeleaf (9) 반복 (0) | 2023.11.15 |