티스토리 뷰
타임리프는 자바스크립트를 더욱 편리하게 사용할 수 있도록 자바스크립트 인라인 기능을 제공한다
구체적으로 어떠한 기능들을 제공하는지 살펴보자
자바스크립트 인라인 기능을 사용하려면 아래와 같이 작성하면 된다
<script th:inline="javascript">
(생략)
</script>
예시를 위하여 서버 쪽에서 아래와 같이 데이터를 보냈다고 가정해보자
public String javascriptInline(Model model) {
model.addAttribute ("user", new UserDTO("userA", 10)); //(username, age)
}
Text Inlining (텍스트 렌더링)
자바스크립트에서 변수값을 타임리프 변수로 대입할 때 자주 나는 오류가 특히 문자열에서 따옴표를 사용하지 않아서이다
또한 이를 알고 있다고 하더라도 매번 따옴표를 더하기에는 너무 번거롭다
<!-- 자바스크립트 인라인 사용전 -->
<script>
var username = [[${user.username}]];
var age = [[${user.age}]];
</script>
<!-- 결과 -->
var username = name;
var age = 10;
<!-- 자바스크립트 인라인 사용후 -->
<script th:inline="javascript">
var username = [[${user.username}]];
var age = [[${user.age}]];
</script>
<!-- 결과 -->
var username = "name";
var age = 10;
위와 같이 자바스크립트 인라인을 사용하게 되면 알아서 따옴표를 추가해주기 때문에 편리하게 사용할 수 있다
또한 여기에 더하여 자바스크립트에서 문제가 될 수 있는 문자가 포함되어 있다면 이스케이프 처리도 해준다
JavaScript Natural Templates (자바스크립트 내추럴 템플릿)
타임리프는 HTML 파일을 직접 열어도 동작하는 내추럴 템플릿을 제공한다,
이때 자바스크립트 인라인을 사용하면 주석을 활용하여 이 기능을 사용할 수 있다
<!-- 자바스크립트 인라인 사용전 -->
<script>
var username = /*userA*/ "usernameB";
</script>
<!-- 결과 -->
var username = /*userA*/ "usernameB";
<!-- 자바스크립트 인라인 사용후 -->
<script th:inline="javascript">
var username = /*userA*/ "usernameB";
</script>
<!-- 결과 -->
var username2 = "userA";
인라인을 사용하지 않으면 그대로 해석을 해버려 내추럴 템플릿 기능이 동작하지 않고, 렌더링 내용이 주석처리되어버렸다,
하지만 인라인을 사용하게 되면 주석 부분이 제거되고 의도했던 userA 값이 들어간다
Advanced Inlined Evaluation and JavaScript Serialization (객체화)
타임리프의 자바스크립트 인라인은 아래와 같은 객체들을 자동으로 객체화해준다
예시와 함께 살펴보자
<!-- 자바스크립트 인라인 사용전 -->
<script>
var user = [[${user}]];
</script>
<!-- 결과 -->
var user = BasicController.User(username=userA, age=10);
<!-- 자바스크립트 인라인 사용후 -->
<script th:inline="javascript">
var user = [[${user}]];
</script>
<!-- 결과 -->
var user = {"username":"userA","age":10}
UserDTO란 객체로 넘어온 객체 안에는 username과 age값이 들어있다
자바스크립트 인라인을 적용하기 전에는 객체의 내용물을 그대로 출력하지만
인라인을 적용하고 난 후에는 JSON형식으로 알아서 객체화를 해준다
JavaScript Inlining Each (자바스크립트 인라인 반복)
마지막으로 자바스크립트 인라인은 each를 지원하는데 기존의 th:each와 똑같이 작동한다
<script th:inline="javascript">
[# th:each="user, stat : ${users}"]
var user[[${stat.count}]] = [[${user}]];
[/]
</script>
자바스크립트 인라인의 each를 사용하면 th:each와 마찬가지로 해당 객체의 반복문을 돌려 아래와 같이 값들을 뽑아낸다
<script>
var user1 = {"username":"userA","age":10};
var user2 = {"username":"userB","age":20};
var user3 = {"username":"userC","age":30};
</script>
개인 학습을 위해 작성되는 글입니다.
제가 잘못 알고 있는 점에 대한 지적 / 더 나은 방향에 대한 댓글을 환영합니다.
참조 링크:
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html
'WEB > Template Engine' 카테고리의 다른 글
[Thymeleaf] Template Layout (템플릿 레이아웃) (0) | 2021.09.02 |
---|---|
[Thymeleaf] Templates Fragments (템플릿 조각) (0) | 2021.09.02 |
[Thymeleaf] Block tag (블록 태그) (0) | 2021.09.02 |
[Thymeleaf] Comments (주석) (0) | 2021.09.02 |
[Thymeleaf] Conditional Evaluation (조건부 평가) (0) | 2021.09.01 |
- Total
- Today
- Yesterday
- 세션
- 쿠키
- Cache
- Session
- 캐시
- 제이쿼리 탐색선택자
- DefaultHandlerExceptionResolver
- OOP
- jQuery 직접 선택자
- @ResponseStatus
- ExceptionHandlerExceptionResolver
- Spring TypeConverter
- 제이쿼리란
- Spring MVC
- 맨코
- 제이쿼리 기본 선택자
- spring
- @ExceptionHandlere
- 제이쿼리 인접 관계 선택자
- ResponseStatusExeceptionResolver
- Spring Container
- DTO와 VO의 차이
- Spring API Error
- maenco
- uri
- application/x-www-form-urlencoded
- 제이쿼리 위치탐색선택자
- 제이쿼리 직접 선택자
- cookie
- http
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |