본문 바로가기

카테고리 없음

FreeMarker Assign


사용법 

<#assign name=value>
or
<#assign name1=value1 name2=value2 ... nameN=valueN>
or
<#assign same as above... in namespacehash>
or
<#assign name>
  capture this
</#assign>
or
<#assign name in namespacehash>
  capture this
</#assign>

설명 :
name
: name은 변수를 말한다. 변수는 문자열로 된 이름이면 가능하다. 예를 들면 <#assign "foo-bar" = 1>. 으로 정의할수도 있다. 

value: 변수에 들어갈 값을 나타내며, 수식이 들어올 수 있다. 

namespacehash: namespach를 지정할 수 있다. 

설명 

새로운 변수를 생성하거나, 기존의 변수의 값을 변경하고자 할때 이용이 가능하다.

예제: season이라는 변수에 시퀀스를 설정한다. 시퀀스는 배열과 같다.

<#assign seasons = ["winter", "spring", "summer", "autumn"]>  

예제 : test라는 변수의 값에 1을 더한다.

<#assign test = test + 1>  

편리한 기능으로, 하나의 assign 태그로 여러개의 변수에 값을 할당할 수 있다. 예를 들면 다음과 같다.

<#assign
  seasons = ["winter", "spring", "summer", "autumn"]
  test = test + 1
>  

namespace는 변수를 특정 네임스페이스에 담을수 있도록 해준다. in이라는 키워드를 이용하여 네임스페이스를 지정할 수 있으며, 네임스페이스를 지정하면 현재의 변수가 아닌 특정 네임스페이스의 값을 대치할 수 있다. 예를 들어 다음 예제는 /mylib.ftl이라는 내용에 있는 bgColor의 값을 red로 바꿔주는 역할을 한다.

<#import "/mylib.ftl" as my>
<#assign bgColor="red" in my>  

assign의 극단적인 사용방법은 스타트 태그와 엔드태그 사이에 생성된 결과를 잠시 저장하는데 있다. 다음 예제를 보자.

<#macro myMacro>foo</#macro>
<#assign x>
  <#list 1..3 as n>
    ${n} <@myMacro />
  </#list>
</#assign>
Number of words: ${x?word_list?size}
${x}  

이것을 프린트 하면 다음 결과가 나온다.

Number of words: 6
    1 foo
    2 foo
    3 foo
   

한가지 당부하고자 하는 것은 다음과 같이 변수에 값을 넣지 말라는 말이다.

<#assign x>Hello ${user}!</#assign> <#-- BAD PRACTICE! -->  

그냥 단순히 이렇게 작성하는것이 좋은 습관이다.

<#assign x="Hello ${user}!">  


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