FreeMarker is a free Java-based template engine, originally focusing on dynamic web page generation with MVC software architecture. However, it is a general purpose template engine, with no dependency on servlets or HTTP or HTML, and is thus often used for generating source code, configuration files or e-mails. by Wikipedia
Official site:
Maven dependencies
Since with maven-based project, add these requirement to pom.xml
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
FreeMarker with Spring MVC
import freemarker.template.*;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
private Configuration configuration;
configuration = new Configuration(new Version(2, 3, 20));
configuration.setClassForTemplateLoading(FreeMarkerTemplateUtils.class, "/templates");
configuration.setDefaultEncoding("UTF-8");
configuration.setLocale(Locale.CHINA);
configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
try {
Template template = configuration.getTemplate("user_email.ftl");
String body = FreeMarkerTemplateUtils.processTemplateIntoString(template, userTemplateVariable);
} catch (IOException | TemplateException e) {
log.error("userTemplate error", e);
}
Write to file
Writer out = new FileWriter(dir + "/freemarker.html");
template.process(root, out);
Syntax
default value
Starting from freemarker 2.3.7, you can use this syntax :
${(object.attribute)!}
or, if you want display a default text when the attribute is null
:
${(object.attribute)!"default text"}
list
If you have a list as List<Food> menu
<#list menu as food>
${food.name} ${food.price?string.currency}
</#list>
if/switch
<#if var == 1>
1
<#elseif var == 2>
2
<#else>
0
</#if>
and switch
<#switch y>
<#case "one">
one
<#break>
<#case "two">
two
<#break>
<#case "three">
three
<#break>
<#default>
zero
</#switch>
function
<#function fact n>
<#if n == 0>
<#return 1 />
<#else>
<#return fact(n - 1) * n />
</#if>
</#function>
<#list 0..10 as i>
${i}! => ${fact(i)}
</#list>