본문 바로가기

카테고리 없음

FreeMarker include 이용하기


사용법 

<#include path>
or
<#include path options>

Where:

  • path: 인클루드하고자 하는 파일의 경로를 지정한다. 이 값들은 모두 스트링으로 취급된다. 예제  profile.baseDir + "/menu.ftl".
  • options: 다양한 옵션들이 올수 있다.  encoding=encoding, parse=parse
    • encoding: 처리하고자 하는 인코딩 타입
    • parse: boolean 값으로 표현된다.

설명 

현재 템플릿에 다른 FreeMarker 템플릿을 추가하기 위해서 사용된다. 추가할 파일은 path를 통해서 입력이 가능하다. include 태그가 사용된 지점에 추가할 템플릿이 위치하게 된다. 인클루드 된느 파일은 변수값을 공유하게 된다. 즉, 이것은 추가할 템플릿을 현재 템프릿에 카피-앤-페이스트 하는것과 같은 효과이다. include 디렉티브는 실제 내용을 바꾸는 것이 아니라. 템플릿을 처리하는 processing 과정에서 include디렉티브를 만나는 순간마다 매번 해당 인클루드 템플릿을 처리하는 방식으로 동작한다. 만약 include되는 템플릿 안에 list 루프가 존재한다면 매번 호출될때마다 list가 수행될 것이다.

#노트#

이 디렉티브는 JSP의 include와 혼돈하지 말길 바란다. 이것은 Servlet 컨테이너를 포함하지 않는다. 단순히 프리마커 템플릿을 처리하기만 할 뿐이다.

path 파라미터는 다음과 같이 상대경로로 작업할수 있다. "foo.ftl" 혹은 "../foo.ftl"이것은 상대 경로를 지정한 것이고
, "/foo.ftl"은 절대 경로를 지정한 것이다. 상대경로는 import 하는 템플릿의 디렉토리 경로부터 시작한다. 절대경로는 프리마커에서 설정한 기본 경로부터 시작하게 된다.

#노트#

프리마커 2.1 버젼은 항상 절대 경로를 이용한다는 것이 최신 버젼과의 차이점이다.

항상 경로를 구분할때에는 / (슬레쉬)를 이용하여 구분해야한다. 절대로 \(백슬레쉬)를 이용하면 안된다. 만약 윈도우에서 이용한다면 프리마커는 백슬레쉬를 자동으로 슬레쉬로 변환하게 될 것이다.

예제 )

/common/copyright.ftl 파일

Copyright 2001-2002 ${me}<br>
All rights reserved.  

이것을 인클루드 한다면

<#assign me = "Juila Smith">
<h1>Some test</h1>
<p>Yeah.
<hr>
<#include "/common/copyright.ftl">  

츨력 결과는 다음과 같다.

<h1>Some test</h1>
<p>Yeah.
<hr>
Copyright 2001-2002 Juila Smith
All rights reserved.  

include에서 지원하는 옵션은 다음과 같다.

  • parse: 이 값이 true라면 인클루드 도리때 파싱을 수행한다는 말이다. false인경우 인클루드 되는 대상을 단순 텍스트라고 취급하게 된다. 기본값은 true이다.

  • encoding: 인클루드 되는 파일은 인클루드 템플릿의 인코딩 타입을 상속받게 된다. 그러나 만약 특정 인코딩 타입을 별도로 주고 싶다면, encoding을 지정하면 된다.

예제 )

<#include "/common/navbar.html" parse=false encoding="Shift_JIS">  

accuisition 이용 

특별한 경로 지정자가 있는데 그것이 바로 * 이다. 이것은 어떠한 부모 디렉토리에서든지 해당하는 ftl파일을 찾아라는 의미를 갖는다. 다음 예제는 /foo/bar/template.ftl 에 템플릿이 존재한다면 그것을 로드하게 된다.

<#include "*/footer.ftl">  

만약 여러개의 템플릿이 존재한다면 다음과 같은 순서로 인클루드 된다.

  • /foo/bar/footer.ftl
  • /foo/footer.ftl
  • /footer.ftl

이 메커니즘은 acuisition이라고 불리는데 이것은 디자이너에게 부모 디렉토리에 존재하는 파일을 공통적으로 인클루드 할 수 있는 방법을 제시해주며, 기본적으로 필요한 하위 디렉토리를 재 정의 할 수 있는 수단을 제공해준다.

<#include "*/commons/footer.ftl">  

다음과 같은 순서로 인클루드 된다.

  • /foo/bar/commons/footer.ftl
  • /foo/commons/footer.ftl
  • /commons/footer.ftl

이렇게도 지정할 수 있다.

<#include "commons/*/footer.ftl">  

이러면 다음과 같은 파일들이 검색되게 된다.

  • /foo/bar/commons/footer.ftl
  • /foo/bar/footer.ftl
  • /foo/footer.ftl
  • /footer.ftl

경로에는 하나 이상의 *를 지정할수 있지만, 하나 이상의 *를 지정할경우 템플릿을 찾지 못할수도 있다.

Localized lookup

템플릿이 로드될때 locale가 지정된다. locale는 선택적인 국가나, 다잉얼렉트를 지정하거나, 특정 언어를 지정할때 이용하는 것이다. 템플릿은 보통 프로그래머가 작성한 지역의 로케일을 이용한다. FreemarkerServlet이 템플릿을 로드할때 웹 페이지에서 요청한 언어를 참조하여 로케일을 매칭하게 된다.


템플릿이 다른 템플릿을 로드할때 동일한 로케일을 이용한다. 만약 U.S.English 로케일을 로드한다면 en_Us로 지정된 파일을 로드하는 것이다.

<include "footer.ftl">  

로케일은 다음과 같은 순서로 지정된다.

  • footer_en_US.ftl,
  • footer_en.ftl, and finally
  • footer.ftl

만약 로케일을 지정하고 싶지 않다면 setLocalizedLookup 메소드를 설정에서 지정해주면 된다.


 

<#include "*/footer.ftl">  

다음과 같은 순서로 로케일을 룩업한다.

  • /foo/bar/footer_en_US.ftl
  • /foo/footer_en_US.ftl
  • /footer_en_US.ftl
  • /foo/bar/footer_en.ftl
  • /foo/footer_en.ftl
  • /footer_en.ftl
  • /foo/bar/footer.ftl
  • /foo/footer.ftl
  • /footer.ftl

출처 : http://freemarker.sourceforge.net/docs/ref_directive_include.html