Study

freemarker(프리마커) 관련

메디츠 2024. 1. 21. 13:44
반응형

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

 

반응형