상세 컨텐츠

본문 제목

Freemarker 팁

JavaScript & HTML/Freemarker

by husks 2015. 2. 26. 11:15

본문

반응형



list 관련

_index
- for문(<#list ..>) 돌리다 보면 이게 몇번째인지 궁금할 수 있다.
  한 row에 4개씩 보여 줘야 한다든지 할때 alias로 할당된 변수에 "_index"붙이면
  sequence를 구할 수 있다. 
- 예 :
   <#list array as output>
        ${output_index}
   </#list>

_has_next
- 배열값 중에 다음 값이 존재하는지 여부를 반환한다.
- 예 :
   <#list array as output>
        ${output_index}
        <#if output_has_next></tr></#if>
   </#list>


문자열 관련

[x...y]
- 문자열의 일정 범위를 자를때 사용하는 함수
- 예 :
-----------------------------
  ${hello}<br>
  ${hello[1..4]}<br>
  ${hello?substring(1,4)}<br>
-----------------------------
null님 안녕하세요
ull님
ull
-----------------------------
substring과는 조금 다른 결과를 확인할 수 있다.


null 처리 관련

?has_content
- 배열값이 null이 아니고 1개 이상인지 체크하는 함수
  ?exists와 ?size>0 두가지 기능을 포함한다.
- 예 :
 <#if array?has_content>
    ... 처리
 </#if>

?exists
- null 체크
- 예 :
 <#if user?exists>
    ... 처리
 </#if>

?default
- 오브젝트의 값이 null인 경우 입력된 사용자값을 반환한다.
- 예 :
  ${user?default("")}


!"대체값"
- 만약 값이 없다면 ! 값 뒤에 정의된 값이 할당된다.
- 예 :
${hello!'안녕하세요'}
이렇게 하면 값이 없으면 "안녕하세요"가 찍힌다.

??
- null 여부에 따라 true, false 반환
- 예 :
< #if user??>${user}<#else>사용자</#if>
${user!"사용자"} 이것과 동일한 결과를 반환한다.



ftl파일에 아래 같은 내용을 코딩한다.

${hello}

hello에 값이 있다면 그 값을 뿌려준다. ^^
정상~~~

에러상황 : hello 자체를 서버단에서 내려 주지 않았거나 값이 null이라면?
 
freemarker에서는 request에 담긴 값을 map에 담아서 내려주는데 값이 없으면 아예 담지를 않는다.
따라서 key가 없으니 에러가 날 수 밖에 없다.

The problematic instruction:
----------
==> ${x} [on line 6, column 1 in test/test1.ftl]
----------

이때는 아래처럼 처리하면 된다.

${hello!'안녕하세요'}

이렇게 하면 값이 없으면 "안녕하세요"가 찍힌다.

그외 추가

<#if user??><h1>Welcome ${user}!</h1><#else>사용자</#if>
${user!"사용자"}

두개의 결과물은 같다 ^^



    @RequestMapping("/test/test1.gs")
    public ModelAndView test1(@ModelAttribute("kkaok") TestDto testDto, Test2Dto test2Dto, BindingResult errors) throws Exception {
        ModelAndView mav = new ModelAndView("/test/test1");
        boolean testBoolean = true;
        mav.addObject("testBoolean", testBoolean);
        return mav;
    }

서버단에서 아래처럼 값을 내려 준다고 할때

${testBoolean}

이렇게 하면 에러가 난다.

${testBoolean?string}


이런식이어야 하는데 조건에 따라 다른 값을 보여 줘야 한다면?

${testBoolean?string("니가 맞아^^","내가 틀릴줄 알았다!!!")}


굳이 조건문이 들어 갈 필요가 없다.


그외
$(booleaValue?string) 이렇게 하면 기본 값은 true, false이다. 두개의 값은 comma로 구분되며
이 기본 값을 바꿀 수도 있다.
<#setting boolean_format = "good,bad">

이렇게 상단에 설정을 해 주고
${testBoolean?string} 이렇게 하면 화면에 보이는 결과는 good이 찍히게 된다.
전체 페이지에 필요하다면 공통으로 뽑아서 include하면된다.
전체에 쓰는데 굳이 include하고 싶지 않다면 시스템 설정에 추가해주면된다.

 <!-- freemarker config -->
 <bean
  class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
  <property name="templateLoaderPath" value="/WEB-INF/templates" />
  <property name="freemarkerSettings">
   <props>
    <prop key="number_format">###.###</prop>
    <prop key="date_format">yyyy-MM-dd</prop>
    <prop key="boolean_format">yes,no</prop>
      </props>
  </property>
 </bean>

[출처] Freemarker 팁|작성자 sikunix


반응형

'JavaScript & HTML > Freemarker' 카테고리의 다른 글

FreeMarker 문법 개요  (0) 2015.02.26
프리마커 개행 (freemarker replace new line)  (0) 2015.02.26

관련글 더보기

댓글 영역