@Controller
@RequestMapping("/basic")
public class BasicController {
@GetMapping("/text-basic")
public String textBasic(Model model){
model.addAttribute("data","Hello Spring!");
return "basic/text-basic";
}
@GetMapping("/text-unescaped")
public String textUnescaped(Model model){
model.addAttribute("data","Hello <b>Spring!</b>");
return "basic/text-unescaped";
}
}
간단하게 basic은 model에 data라는 키로 문자열을 담아서 넘긴다.
<li>th:text 사용 <span th:text="${data}"></span></li>
<li>컨텐츠 안에서 직접 출력 [[${data}]]</li>
저렇게 하면 된다. 그냥 th:text="${data}"
아예 태그 안쪽에서 직접 출력하려면 [[${data}]] 이렇게
- th:text 사용 Hello Spring!
- 컨텐츠 안에서 직접 출력 Hello Spring!
출력 결과
다음 unescaped
이스케이프란 탈출, 즉 기존 정해진 문자규칙에서 탈출한다는 뜻이다.
model.addAttribute("data","Hello <b>Spring!</b>");
data란 이름에 b태그를 넣어 보낸다.
<ul>
<li>th:text = <span th:text="${data}"></span></li>
<li>th:utext = <span th:utext="${data}"></span></li>
</ul>
<h1><span th:inline="none">[[...]] vs [(...)]</span></h1>
<ul>
<li><span th:inline="none">[[...]] = </span>[[${data}]]</li>
<li><span th:inline="none">[(...)] = </span>[(${data})]</li>
</ul>
utext가 unescaped로 쓴다는 뜻이다.
- th:text = Hello <b>Spring!</b>
- th:utext = Hello Spring!
출력 결과.
unescaped로 쓴건 내가 컨트롤러에서 "data"라는 키로 보낸 걸 그대로 문자규칙을 적용해서 태그로써 작동하였다.
model.addAttribute("data","Hello <b>Spring!</b>");
escaped된 상태로 작동한 부분의 페이지 소스를 보면
<li><span>[[...]] = </span>Hello < b > Spring! < /b > </li>
이렇게 되어 있다. 알아서 치환되어 들어갔다. (띄어쓰기는 내가 잘보이라고 한거임.)
- [[...]] = Hello <b>Spring!</b>
- [(...)] = Hello Spring!
이건 아래 ul의 출력 결과인데,
[(${data})] 이게 unescaped다.
기본적으로 escaped 상태로 써야 한다. 안그럼 랜더링 과정에서 문제가 발생할 요지가 크다.
내가 직접 태그로 쓰고 싶은 경우에만 의식하고 unescaped로 쓴다.
default가 escaped 상태다.
'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글
6. thymeleaf 리터럴 (0) | 2023.08.22 |
---|---|
5. thymeleaf url (0) | 2023.08.21 |
4. 유틸 객체, 시간표현 (0) | 2023.08.21 |
3. thymeleaf 기본 제공되는 객체 (0) | 2023.08.21 |
2. 변수 (0) | 2023.08.21 |