freemarker(프리마커) 관련
19년 11월 기준.
FreeMarker IDE 1.5.304 // 안먹힘.
FreeMarker IDE from Jboss Tools 1.5 // 안먹힘.
// *.ftl 파일 연결. Eclipse Marketplace에서 설치.
Window-preference-General-Content Types에서 HTML에 *.ftl을 등록.
Editors-File Associations-Associated editors에서 HTML을 Default로 잡아줘야 함.
freemarker 사용시 *.ftl은 서버 restart해야 적용됨
<#if articleList??>
// null check
<#if category = "article">
// =은 한번만
${seq?c}
// 숫자 , 제거
<#--
// freemarker 주석. <!--은 바인딩이 됨.
user_id대신 userId
// underline 사용불가. camel만 사용가능.
freemarker는 _(underline) 형식 미지원 (user_id 값 바인딩되지않음)
VO부터 userId처럼 camel 형태로 생성
Properties properties = new Properties();
properties.setProperty("mapUnderscoreToCamelCase", "true");
properties.put("mapUnderscoreToCamelCase", true);
sessionFactory.setConfigurationProperties(properties);
// 현재 프로젝트에서 java옵션으로는 안됨. put도 안됨.
# MYBATIS
mybatis:
configuration:
map-underscore-to-camel-case: true
// yml 안됨
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0/EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
// mybatis-config.xml. src/main/resources가 기본 classpath. Project-Deployment Assembly 확인.
Resource myBatisConfig = new PathMatchingResourcePatternResolver().getResource("classpath:mybatis-config.xml");
sessionFactory.setConfigLocation(myBatisConfig);
// xml로 잡으니 됨.
model.addAttribute("article_data", "article_data");
// _들어간 데이터 바인딩 됨.
Map<String, String> list = new HashMap<>();
list.put("article_data", "article_data");
model.addAttribute("list", list);
// ${list.article_data}. list에 들어간 _도 사용됨.
${article}
// list에 데이터 있는건 확인.
${article.user_name!""}
// list로 바인딩한 db데이터 _만 사용이 불가. title, content는 가능. mapUnderscoreToCamelCase 옵션으로 해결.
<#list articleList?keys as key>
${key} = ${articleList[key]}
</#list>
// ?는 deprecated된 것. tester에서만 됨.
<ul><#list articleList as index>
<li>${index.title}</li>
</#list></ul>
// 출력
<#list userList?reverse as user>
// reverse 출력
freemarker 데이터바인딩 문제
// getUserId, setUserId 값이 camelCase로 일치할것. 데이터를 담아도 바인딩안되는 경우, get, set 확인. ${article.userId!""}. 데이터는 user_id라도 getUserId이므로 camelCase가 반영된다.
<#assign searchOption = "0">
// define 같은 매크로. assign은 if 사용안됨.
${article.regDt?string("yyyy-MM-dd HH-mm-ss zzz")}
// date 변환
${article.regDt?string("yyyy-MM-dd")}
// substring deprecated. 쿼리에서 가공. DATE_FORMAT(REG_DT, '%Y-%m-%d')
get, set은 FreeMarker의 영향을 받으므로 대소문자 구분 확실히해야함.
ex) reg_date는 getRegDate, regdate는 getRegdate