템플릿 엔진 프리마커 알아두면 좋은 팁 : Template Engine Freemarker
"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> 처음</a>
<a class="direction sprev prevpage" href="#"><span></span> 이전</a>
<span class="pageaction"></span>
<a class="num" href="">page</a>
<strong class="now">page</strong>
<span class="div"> </span>
<a class="direction snext nextpage" href="#">다음 <span></span></a>
<a class="direction snext end" href="#">끝 <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 매크로를 앞에 쓰고 뒤에는 인수의 값을 전달하여 호출하면 됩니다.
결과는 매크로에 작성된 코드가 노출되게 됩니다.
생각날때마다 계속 업데이트를 하겠습니다~
'개발노트 > JAVA' 카테고리의 다른 글
PMD - 코드 분석 도구 룰셋에 대한 설명 : Java Code Inspection , Rule set (0) | 2016.10.31 |
---|---|
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl 오류 (0) | 2013.05.22 |
프리마커 템플릿 소스 불러오기 : freemarker ftl (1) | 2012.09.07 |
소셜네트워크 네이버 미투데이 API 개발 #5 Open API , Naver Me2day API , SNS (0) | 2012.06.05 |