프로그래밍/Spring & Spring boot

[Springboot / 스프링부트] thymeleaf (1) 타임리프 표현식

pupu91 2022. 9. 26. 17:31
반응형

1. thymeleaf 사용

    <html xmlns:th="http://www.thymeleaf.org">

     타임리프의 th 속성을 사용하기 위한 네임스페이스로 HTML 태그의 속성으로 작성하기

 

2. 주석의 종류

    (1) parser-level 주석

         정적 페이지에서 주석으로 있다가 thymeleaf가 처리 될 때 제거되어 클라이언트에게 노출되지 않는 주석

         ex) <!--/* 주석내용 */-->

    (2) protorype-only 주석

         정적 페이지에 주석으로 있다가 thymeleaf 처리 후에 화면에 보여지게 되는 주석 

          ex) <!--/*/ 주석내용 /*/-->

 

3. 표현식

   -  parameter로 넘어온 경우 -> param
   -  session attribute일 경우 ->session
   -  model에 담겨 온 경우(request)는 따로 적지 않음. request라고 명시하면 오류 발생함.

(1) 변수 표현식 ${ 변수 작성 }

    ex) <p th:text="${ param.title }"></p>

(2) 메세지 표현식 #{ 메세지 작성 }

    ex)  <p th:text="#{ message.first }"></p>

(3) 링크 표현식 @{ 링크 작성 }

      - 소괄호 안에만 표현하면 링크의 파라미터로 기능하며, 중괄호 안에 변수명을 작성해주면 path variable로 기능

<a th:href="@{/}">메인으로</a>
<a th:hrekdef="@{/(name=${member.name},age=${member.age})}">Test1</a>
<a th:href="@{/{name}/{age}(name=${member.name},age=${member.age})}">Test2</a>
<a th:href="@{/{name}(name=${member.name},age=${member.age})}">Test3</a>

     

(4) 선택 변수 표현식 *{ 변수 표현 작성 }

   - th:object 에 class 명을 작성하면 th:text에 변수명만 작성 할 수 있게 됨.

<p th:text="${ member.name }"> </p>
<p th:object="${ member }" th:text="*{ age }"></p>
<div th:object="${ member}">
<p th:text="*{ gender }"></p>

 

(5) HTML 출력 th:text, th:utext, th:value

    - EL 태그의 값을 대그 내부의 값으로 작성하기 위해서는 th:text 또는 th:utext를 사용할 수 있음

       th:text는 escape가 적용 되어 태그를 단순 문자열로 처리하지만 th:utext는 escape가 적용되지 않아

       태그를 태그로서 인식할 수 있음. th:value는 태그의 calue 값을 지정할 수 있음

<ul>
  <li th:text="${ hello }"></li>
  <li th:utext="${ hello }"></li>
  <li><input type="text" th:value="${ member.name }"></li>
</ul>

 

controller에서 태그로 전달

model.addAttribute("hello","hello!<h2>Thymeleaf</h2>");

 

(5) 인라인 표현식

     - 대괄호로 묶어 변수 표현식의 값을 가져오는 것

     - text모드와 자바스크립트 모드가 있음

     - 변수 표현식의 값을 html에 직접 표현하기 위해서 th:text와 같은 [[...]]를 사용하고 th:utext와 같은 [(...)]을 사용

     - 인라인 모드 적용시 th:inline="text"(기본값) 

     - 인라인 모드 해제  th:inline="none"

     - 자바스트립트에서 사용  th:inline="javascript"

 

 

텍스트 모드

<ul>
  <li th:inline="text">[[${hello}]]</li>
  <li> [(${hello})]</li>
  <li th:inline="none">[[${hello}]]</li>
  <li th:inline="none">[(${hello})]</li>
</ul>

     

 

 

자바스크립트 모드

<script th:inline="javascript">
		 
window.onload = function(){
	//이벤트 핸들러 정의, 이페이지가 다 로드하고 나면 이 메소드 동작
		 		
	/* 동적 페이지에서는 정상 동작하지만 정적 페이지에서는 자바스크립트 문법 오류 발생 */
	//const hello = [[${hello}]];
		 		
	/* 정적 페이지에서는 정상 동작하지만 동적 페이지에서는 자바스크립트 오류 발생*/
	//const hello ="[[${hello}]]";
		 		
	/* 정적 페이지와 동적 페이지에서 모두 정상 동작한다. */
	const hello = '[[${hello}]]';
	alert(hello);
}

       

(6) 리터럴 치환 ||

     - '+'를 사용하지 않고 ||로 문자열을 합칠 수 있다.

       

<p th:object="${ member }" th:text="|name = *{name}|"></p>
<p th:object="${ member }" th:text="|age = *{age}|"></p>
<p th:object="${ member }" th:text="|gender = *{gender}|"></p>
<p th:object="${ member }" th:text="|address = *{address}|"></p>

 

(7) th:block

    - 범위를 지정하고 싶을 때 사용

    - th:block을 통해 해당 번위에 변수나 객체를 적용하거나 조건에 해당되는지에 따라 해당 범위를 보여주거나 보여주지          않을 때 사용

<th:block th:object="${ member }">
	<p th:text="*{ age }"></p>
</th:block>
반응형