본문 바로가기
Old Posts/Java

[Java] 프리마커 스페셜 템플릿 변수들(Freemarker Special Variables)

by A6K 2021. 7. 16.

프리마커 템플릿 언어(FTL, Freemarker Template Language)에는 몇가지 특별한 변수들이 있다. 이 특별 변수들을 사용하기 위해서 템플릿을 작성할 때 '.variable_name' 형태로 사용해야한다. 즉, auto_esc라는 특별 변수를 템플릿에서 사용하려면 .auto_esc로 사용해야한다.

프리마커 템플릿 언어의 특별 변수들은 기본적으로 스네이크 표현법을 지원하며 2.3.23 버전부터 카멜 표기법도 제공된다.

프리마커 특별 변수들

auto_esc

auto-escaping 설정 여부를 의미하는 불리언 변수

caller_template_name

현재 매크로 혹은 함수가 호출된 템플릿의 이름(경로)

current_template_name

현재 템플릿의 이름(경로)

data_model

템플릿이 넘겨 받은 데이터 모델로의 직접 접근(해시). global 디렉티브로 생성되는 변수는 볼 수 없음

error

recover 디렉티브에서 사용되는 변수로 에러 메시지에 접근할 수 있음

globals

 data-model로 넘겨 받은 값과 global 디렉티브로 생성된 변수를 접근할 수 있는 해시. assign이나 macro에서 선언된 변수는 global이 아니라서 보이지 않음

incompatible_improvements

현재 프리마커 설정의 incompatible_improvements 설정 값

lang

현재 언어 설정. ex) en

locale

현재 로케일 설정. ex) en_US

locale_object

현재 로케일 설정 값을 java.util.Locale 객체로 반환. 자바 메소드와 함께 사용할 때 쓸 수 있음

locals

로컬 변수들에 접근할 수 있는 해시

main

메인 네임스페이스에 접근할 수 있는 해시. Data-model과 global 변수들은 보이지 않음

main_template_name

최상위 템플릿 이름을 리턴.

namespace

현재 네임스페이스에 접근할 수 있는 해시

node

visitor 패턴으로 처리중인 현재 XML 노드

now

현재 date-time.

output_encoding

현재 출력의 캐릭터 셋(Charset)을 리턴

get_optional_template

존재하지 않을 수 있는 템플릿을 처리할 때 사용되는 메소드. 실행 결과로 다음 3가지 항목이 담긴 해시가 리턴됨

- exists : 템플릿이 존재하는지 여부

- include : 템플릿을 include 할 수 있는 메소드

- import : 템플릿을 import 할 수 있는 메소드

예)

<#assign optTemp = .get_optional_template('some.ftl')>
<#if optTemp.exists>
    Template was found:
    <@optTemp.include />
<#else>
    Template was missing.
</#if>

pass

아무것도 안함. XML 프로세싱에서 no-op 을 명시하기 위해 사용

url_escaping_charset

URL을 인코딩하기 위해 사용해야 할 Charset 정보. 설정되어 있지 않다면, output_encoding 변수에 할당되어 있는 설정을 사용함

output_format

현재 변수의 출력 영역에서의 output format 정보. "HTML", "XML', "RTF", "plainText" 등.

vars

변수들에 접근. vars["varName"]은 varName과 동일

version

프리마커 버전 정보

이런 스페셜 변수들 중에는 상황에 따라서 Null 값을 리턴하는 경우도 있다. 따라서 정확한 사용방법은 프리마커의 관련 매뉴얼 페이지를 참고하기 바란다. (링크 : https://freemarker.apache.org/docs/ref_specvar.html )

댓글