> Hello World !!!

     

@syaku

템플릿 엔진 프리마커 알아두면 좋은 팁 : Template Engine Freemarker


written by Seok Kyun. Choi. 최석균

"Template Engine Freemarker 템플릿 엔진 프리마커 알아두면 좋은 팁"



스트럿츠2 에 프리마커를사용하기 때문에... 프리마커를 자바단에서 사용할 일은 거의 없어 자바 부분은 빼고 뷰단만 설명하도록 하겠습니다.

기본적으로 알아두면 좋은 팁?? 이랄까... 기초적인 문법이랄까? 여튼 도움이 되었으면 합니다.



프리마커 도큐먼트 : http://www.freemarker.org/docs/index.html 4장 Reference 부터 확인하면 됩니다.



4-1 Built-in Reference



@ 변수


뷰단에서 변수를 선언할 경우

<#assign i = 0>

assign 을 이용합니다.


변수호출은 ${변수명} 을 사용합니다. * 중요 :  자바단에서 public 을 선언해야 뷰단에서 사용할 수 있습니다.

그렇다면 모두다 public 를 사용하는 냐??? 그럼 불편하고 코드량도 많이 늘어나겠죠?? 그래서 해쉬맵에 담아서 사용합니다.

아래의 예제를 참조합니다.


-- java

public Map O = new HashMap();

O.put("name","최석균");


-- ftl (템플릿파일은 ftl 이라고 지칭함)

${O.name} 하면 최석균이라는 결과값을 얻을 수 있습니다.

근데 name 라는 값이 없다면????????? 100% 오류가 발생합니다. 그래서 끝에~

${O.name?if_exists} if_exists 명령어를 붙여주면 오류 발생을 막을 수 있어요.

프리마커는 NULL 이거나 선언되지 않은 변수값을 찾을때 오류가 발생합니다.


변수 형이 number 이나 boolean 인 경우 ?string 명령어를 이용하여 문자열로 변경할 수 있습니다.

자바스크립트에 사용되는 변수라면 ?js_string 명령어를 사용합니다.

HTML 태그에 사용되는 변수라면 ?html 명령어를 사용합니다.

<input type="text" value="${test?html}" />


그외에도 많지만 생략하겠습니다. 보시면 다 아는 내용



@ 날짜


날짜값이 문자열이고 날짜형으로 변경후 원하는 날짜포맷으로 출력하려면


String d = "20121120112030"; // 2012년 11월 20일  11시 220분 30초


위 값을 이용하여 날짜 표시 형식을 변경하고자 할때는

<#assign regdate = d?datetime("yyyyMMddHHmmss")> // 날짜 포맷을 맞춰줍니다.

${regdate?string("yyyy-MM-dd")} // 원하는 형식으로 출력합니다.


좀 더 자세한 사항은 메뉴얼을 참조하세요.



@ if, else, elseif


if 문을 사용할때 변수가 선언되어 있지 않을 경우 사용하면 오류가 발생하는 데...

name 이란 변수가 선언되어 있지 않을 경우

<#if name?exists == null> exists 사용하여 오류발생을 막을 수 있습니다.



@ 반복문


list 반복문은 다음과 같이 사용합니다.


<#list listData as obj>

${obj.title}

</#list>


프리마커는 기존에 사용하던 문법 그대로를 사용하기 때문에 개발언어를 익히신 분이라면 쉽게 접할 수 있는 내용입니다.

여기서 팁하나... 반복문을 사용할때 특정문자를 조합할 경우가 있습니다.

예를 들어 반복하면서 끝에 , (쉼표)를 붙인다고 가정할때 마지막 반복에는 붙이지 않고 싶을때가 있습니다.

그럴때 사용하는 명령어는 obj_has_next 이며 아래와 같이 사용하면 됩니다.


<#list .... as obj>

<#if obj_has_next> , </#if>

</#list>



@ 매크로


매크로는 ASP 언어에서 사용하는 SUB 명령어와 유사합니다. 리턴값이 없지만 결과를 그대로 그영역에 노출하는 명령어 입니다.

소스가 많으나 빨간색 글씨만 보시면 됩니다.


<#macro pagenavigator url form params>


<div class="paginate_complex" id="paginate">

  <a class="direction sprev start" href="#"><span></span><span></span>&nbsp;처음</a>

  <a class="direction sprev prevpage" href="#"><span></span>&nbsp;이전</a>

  <span class="pageaction"></span>

  <a class="num" href="">page</a>

  <strong class="now">page</strong>

  <span class="div">&nbsp;</span>

  <a class="direction snext nextpage" href="#">다음&nbsp;<span></span></a>

  <a class="direction snext end" href="#">끝&nbsp;<span></span><span></span></a>

</div>

<script type="text/javascript">

  jQuery('.paginate_complex').jaPageNavigator({

      url : "${url}"

    , form : "${form}"

    , page_row : "${params.page_row}"

    , page : "${params.page}"

    , total_count : "${params.total_count}"

  });

</script>



</#macro>


#macro 로 시작하여 매이크로 이름을 pagenavigator 로 하였고 나머지는 매이크로에서 받아 들이는 인수입니다.

뛰어쓰기로 구분하는 것을 확인할 수 있습니다.

인수는 url , form , params 이며, params 는 object 임을 알수있겠죠... 이처럼 정의된 변수 형식을 받는 것이 아니라 

선언없이 무작위로 받아을 수 있습니다. 단... object 를 string 으로 사용한다면 당연히 오류가 발생하겠죠.


매크로를 만들었다면 호출하려면 다음과 같습니다.


<@pagenavigator url = param.get('?page=')?j_string form="#form" params = navi />


pagenavigator 매크로를 앞에 쓰고 뒤에는 인수의 값을 전달하여 호출하면 됩니다.

결과는 매크로에 작성된 코드가 노출되게 됩니다.





생각날때마다 계속 업데이트를 하겠습니다~









posted syaku blog

Syaku Blog by Seok Kyun. Choi. 최석균.

http://syaku.tistory.com