[Thymeleaf] 타임리프 기본 표현식과 속성 기능

반응형

기본 표현식

 

01.  ${...} : 변수 표현식 (Variable Expressions)

  • 서버에서 전달된 변수를 참조할 때 사용
    ${cssStyle}

 

02.  *{...} : 선택 변수 표현식 (Selection Variable Expressions)

  • 선택된 객체의 속성 값을 참조할 때 사용
  • 선택된 객체의 속성에 바로 접근할 수 있음
    <form th:object="${user}"> ​​​​<label>Name: </label> ​​​​<input type="text" th:value="*{name}" /> </form>

 

03.  #{...} : 메시지 표현식 (Message  Expressions)

  • 메시지 파일(주로 messages.properties)에서 값을 참조할 때 사용
  • 다국어나 반복적으로 사용되는 텍스트 관리할 때 많이 사용
    # messages.properties 파일 welcome.message=Welcome to our website! # html 파일 <p th:text="#{welcome.message}"></p> # 렌더링 결과 <p>Welcome to our website!</p>

 

  • 링크를 동적으로 생성할 때 사용
  • 타임리프는 웹 애플리케이션의 컨텍스트 경로를 자동으로 처리함
    <a th:href="@{/home}">Home</a>

 

05.  ~{...} : 프래그먼트 표현식 (Fragment Expressions)

  • 템플릿 파일의 일부(fragment)를 포함하거나 참조할 때 사용
  • 재사용 가능한 UI 컴포넌트를 정의하고, 유지보수성을 높일 수 있음
    <div th:insert="~{header :: header}"></div>

 

06. 텍스트 리터럴

  • 변수, 숫자, 메시지 표현식을 함께 사용하여 문자열을 결합할 수 있음
  • |  | 기호는 텍스트 안에 포함된 변수를 처리할 때 사용하며, 자바스크립트에서 백틱(`)과 유사한 역할을 함
    <!-- 텍스트 리터럴 사용 전 --> <p th:text="'The name is' ${name}"></p> <!-- 텍스트 리터럴 사용 후 --> <p th:text="|The name is ${name}|"></p>

 


속성 값 추가 (Append)

 

01. attrappend

attrappend는 HTML 속성(class, href, style 등)에 값을 추가할 때 사용하는데, 기존 속성을 덮어쓰지 않고 특정 속성에 값을 추가함

 

🔻예시 : 버튼에 변수인 cssStyle 추가하기

<input type="button" class="btn" th:attrappend="class=${' ' + cssStyle}" /> <!-- 렌더링 결과 --> <input type="button" class="btn warning" />

 

🔻예시 : 조건문이 참일 때, 클래스 추가하기

<tr th:attrappend="class=${prodStat.odd} ? ' odd'">

 

 

02. classappend

classappend는 기존 속성을 덮어쓰지 않고 요소에 클래스를 추가할 수 있음

 

🔻예시 : 버튼에 cssStyle 추가하기

<input type="button" class="btn" th:classappend="cssStyle" /> <!-- 렌더링 결과 --> <input type="button" class="btn cssStyle" />

 

🔻예시 : menu의 이름이 같을 때만 'active' class 추가

<ul class="nav nav-pills"> ​​​​<li class="nav-item"> ‌​​​​<a class="nav-link" id="home" th:classappend="${menu} == 'home'? 'active'">home</a> ​​​​</li> ​​​​<li class="nav-item"> ‌​​​​<a class="nav-link" id="board" th:classappend="${menu} == 'board'? 'active'">board</a> ​​​​</li> ​​​​<li class="nav-item"> ‌​​​​<a class="nav-link" id="about" th:classappend="${menu} == 'about'? 'active'">about</a> ​​​​</li> </ul>

 


Href

타임리프에서 href 는 정적인 HTML 파일을 열었을 때 사용되며,

동적인 경로(서버를 구동했을 때의 경로)는 th:href 를 사용하여 지정해줘야 함

 

01. 기본

<link href="../css/style.css" th:href="@{/css/style.css}" />

 

02. 파라미터 전달

<a class="nav-link" id="home" th:href="@{/index(${id})}">home</a>
  • index 페이지에 파라미터로 id값 전달하여 컨트롤러에서 활용
반응형

댓글