Struts - Velocity Template Language(VTL) 참조 안내서
목록  
제 목 Velocity Template Language(VTL) 참조 안내서
작성자 김종혁 작성일 2007/06/13 15:52


참조들
변수들
표기:
$ [ ! ][ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ][ } ]
예제:
  • 통상적인 표기: $mud-Slinger_9
  • 무성 표기: $!mud-Slinger_9
  • 정식 표기: ${mud-Slinger_9}

프로퍼티들
표기:
$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* .[a..z, A..Z ][ a..z, A-Z, 0..9, -, _ ]* [ } ]
예제:
  • 정규 표기: $customer.Address
  • 정식 표기: ${purchase.Total}

메소드들
표기:
$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* .[ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]*( [ optional parameter list... ] ) [ } ]
예제:
  • 정규 표기: $customer.getAddress()
  • 정식 표기: ${purchase.getTotal()}
  • 정규 표기 with Parameter List: $page.setTitle( "My Home Page" )

VTL 프로퍼티들은 getset을 취하는 VTL 메소드들에 대한 간결화된 표기로서 사용될 수 있다. $object.getMethod() 또는 $object.setMethod()$object.Method로서 간결화 될 수 있다. 이용 가능할 때 프로퍼티를 사용하는 것이 일반적으로 선호된다. 프로퍼티와 메소드들 사이의 주된 차이점은 당신이 메소드에 파라미터 리스트를 지정할 수 있다는 점이다.

다이렉티브들
#set - 참조 값을 갖게 한다
형식:
# [ { ] set [ } ] ( $ref = [ ", ' ]arg[ ", ' ] )
Usage:
  • $ref - 할당의 좌변은 변수 참조 또는 프로퍼티 참조이어야 한다. 
  • arg - 할당의 우변은 만일 이중 인용 부호 속에 닫혀있을 경우에 arg가 파싱 되고, 만일 단일 인용부호 속에 닫혀 있을 경우에 파싱 되지 않는다.만일 우변이 null로 평가될 경우, 그것은 좌변에 할당되지 않는다.
예제들:
  • 변수 참조: #set( $monkey = $bill )
  • 문자열 리터럴: #set( $monkey.Friend = 'monica' )
  • 프로퍼티 참조: #set( $monkey.Blame = $whitehouse.Leak )
  • 메소드 참조: #set( $monkey.Plan = $spindoctor.weave($web) )
  • 숫자 리터럴: #set( $monkey.Number = 123 )
  • 범위 연산자: #set( $monkey.Numbers = [1..3] )
  • 객체 배열: #set( $monkey.Say = ["Not", $my, "fault"] )
우변은 또한 다음과 같은 간단한 산술 표현식일 수 있다:
  • 더하기: #set( $value = $foo + 1 )
  • 빼기: #set( $value = $bar - 1 )
  • 곱하기: #set( $value = $foo * $bar )
  • 나누기: #set( $value = $foo / $bar )
  • 나머지: #set( $value = $foo % $bar )

#if / #elseif / #else - 문장들의 진리값에 대한 조건을 출력한다
형식:
# [ { ] if [ } ] ( [condition] ) [output] [ # [ { ] elseif [ } ] ( [condition] ) [output] ]* [ # [ { ] else [ } ] [output] ] # [ { ] end [ } ]
사용법:
  • 조건 - Iboolean일 경우, 그것이 true false를 갖는 경우인지를 검토한다; 만일 boolean이 아닐 경우, null이 아니면 true로 간주한다.
  • 출력 - VTL을 포함할 수도 있다.
예제들:
  • 등치 연산자: #if( $foo == $bar )
  • 보가 크다: #if( $foo > 42 )
  • 보다 작다: #if( $foo < 42 )
  • 같거나 보다 크다: #if( $foo >= 42 )
  • 같거나 보다 작다: #if( $foo <= 42 )
  • 숫자가 같다: #if( $foo == 42 )
  • 문자열이 같다: #if( $foo == "bar" )
  • Boolean NOT: #if( !$foo )
  • delimit 다이렉티브에 중괄호 사용하기: #if( $foo == $bar)it's true!#{else}it's not!#end

#foreach - 객체들의 리스트를 루프 순환한다
형식:
# [ { ] foreach [ } ] ( $ref in arg ) statement # [ { ] end [ } ]
사용법:
  • $ref - 첫 번째 변수 참조는 아이템이다
  • arg - 다음 중 하나일 수 있다 : 리스트에 대한 참조(예를 들면. 객체 배열, 콜렉션, 또는 amp), 배열 리스트, 또는 범위 연산자. 
  • statement - Velocity가 위에 표기된 리스트 내에서 arg 과 같은 유효한 아이템을 발견할 때마다 출력되는 것. 이 출력은 어떤 유효한 VTL이고 루프의 각각의 반복에 대해 렌더링 된다.
#foreach()에 대한 예제들은 문장 블록을 생략하고 있다:
  • 참조: #foreach ( $item in $items )
  • 배열 리스트: #foreach ( $item in ["Not", $my, "fault"] )
  • 범위 연산자: #foreach ( $item in [1..3] )
Velocity는 당신이 다음과 같이 어떤 것을 행할 수 있도록 루프 카운터를 얻는 쉽운 방법을 제공한다:
<table>
#foreach( $customer in $customerList )
    <tr><td>$velocityCount</td><td>$customer.Name</td></tr>
#end
</table>
velocity.properties 파일 속에 정의되는 루프 카운터 변수 참조에 대한 디폴트 이름은 $velocityCount이다. 디폴트로 카운터는 1에서 시작하지만, 이것은 velocity.properties  파일에서 0또는 1로 설정될 수 있다. 다음은 velocity.properties  파일에서 루프 카운터 프로퍼티 절이 나타나는 것이다: 
# 루프 카운터 변수 참조의 디폴트 이름. 
directive.foreach.counter.name = velocityCount

# 루프 카운터 변수 참조의 디폴트 시작 값.
directive.foreach.counter.initial.value = 1

#include - Velocity에 의해 파싱되지 않는 로컬 파일(들)을 렌더링 한다
형식:
# [ { ] include [ } ] ( arg[, arg2, ... argn] )
  • arg - TEMPLATE_ROOT 하에서 유효한 파일을 참조한다. 
Examples:
  • 문자열: #include( "disclaimer.txt", "opinion.txt" )
  • 변수: #include( $foo, $bar )

#parse - Velocity에 의해 파싱되는 로컬 템플릿을 렌더링 한다
형식:
# [ { ] parse [ } ] ( arg )
  • arg - TEMPLATE_ROOT 하에 있는 템플릿을 참조한다.
예제들:
  • 문자열: #parse( "lecorbusier.vm" )
  • 변수: #parse( $foo )
재귀순환이 허용된다. 파싱 깊이를 변경하려면 velocity.properties 내에 있는 parse_directive.maxdepth를 보라. (디폴트 파싱 깊이는 10이다.)

#stop - 템플릿 엔진을 중지 시킨다
형식:
# [ { ] stop [ } ]
사용법:
이것은 현재 템플릿의 실행을 중지시킬 것이다. 이것은 템플릿 디버깅에 좋다.

#macro - 필요할 때 Velocimacro (VM), VTL 템플릿의 반복되는 조각을 정의하는 것을 사용자에게 허용해준다
형식:
# [ { ] macro [ } ] ( vmname $arg1 [ $arg2 $arg3 ... $argn ] ) [ VM VTL code... ] # [ { ] #end [ } ]
  • vmname - VM을 호출하는데 사용되는 이름(#vmname)
  • $arg1 $arg2 [ ... ] - VM에 대한 아규먼트들. 많은 아규먼트들이 존재할 수 있지만, 호출에 사용되는 숫자들은 정의에서 지정된 숫자와 일치해야 한다.
  • [ VM VTL code... ] - 당신이 템플릿 속에 집어 넣을 수 있는 어떤 것인, 어떤 유효한 VTL 코드는 VM 속에 집어넣어질 수 있다.
일단 정의되었으면, VM은 템플릿 내에서 어떤 다른 VTL 다이렉티브처럼 사용된다.
#vmname( $arg1 $arg2 )
VM들은 다음 두 장소들 중 하나 속에 정의될 수 있다: 
  1. Template library 라이브러리: 는 Velocity에 미리 패키징되어 있는 VM들 또는 안성맞춤으로 만들어진, 사용자 정의된, 사이트-지정적인 VM들일 수 있다; 임의의 템플릿으로부터 이용 가능함
  2. Inline: 정규 템플릿들 속에서 발견되며, velocity.properties 내에서 velocimacro.permissions.allowInline=true일 때에만 사용 가능함.


주석들
주석들은 실행 시에 렌더링 되지 않는다. 
단일 행
예제:
## 이것은 한 행 주석이다.

다중 행
예제:
#*
이것은 다중 행 주석이다.
이것은 두 번째 행이다
*#

 





이전글 Velocity Eclipse UI plugin
다음글 StrutsGuide

목록