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>
댓글 영역