1.application.properties配置:
# FREEMARKER (FreeMarkerAutoConfiguration) spring.freemarker.allow-request-override=false spring.freemarker.allow-session-override=false spring.freemarker.cache=false spring.freemarker.charset=UTF-8 spring.freemarker.check-template-location=true spring.freemarker.content-type=text/html spring.freemarker.enabled=true spring.freemarker.expose-request-attributes=true spring.freemarker.expose-session-attributes=true spring.freemarker.expose-spring-macro-helpers=true spring.freemarker.prefer-file-system-access=true spring.freemarker.suffix=.html spring.freemarker.template-loader-path=classpath:/templates/ spring.freemarker.settings.template_update_delay=0 spring.freemarker.settings.default_encoding=UTF-8 spring.freemarker.settings.classic_compatible=true spring.freemarker.settings.date_format=yyyy-MM-dd spring.freemarker.settings.time_format=HH:mm:ss spring.freemarker.settings.datetime_format=yyyy-MM-dd HH:mm:ss spring.freemarker.request-context-attribute=request spring.freemarker.order=1 auto_import=ftl/spring.ftl as s auto_include=
2.spring.ftl存放位置:
-
templates/ftl/spring.ftl
-
内容:
<#assign base = request.contextPath />
3.freemarkerconfig配置:
-
@org.springframework.context.annotation.Configuration
-
public
class FreemarkerConfig {
-
-
private
static Logger log = LoggerFactory.getLogger(FreemarkerConfig.class);
-
-
@Bean
-
public FreeMarkerConfigurer freeMarkerConfigurer(@Value("${auto_import}") String autoImport,@Value("${auto_include}") String autoInclude) throws Exception {
-
FreeMarkerConfigurer config =
new FreeMarkerConfigurer();
-
writerProperties(config);
-
Configuration configuration =
null;
-
try {
-
configuration = config.createConfiguration();
-
}
catch (IOException e) {
-
throw
new ConfigException(
"freemarker配置bean,IO异常",e);
-
}
catch (TemplateException e) {
-
throw
new ConfigException(
"freemarker配置bean异常",e);
-
}
-
setAutoImport(autoImport,configuration);
-
setAutoInclude(autoInclude,configuration);
-
config.setConfiguration(configuration);
-
return config;
-
}
-
@Autowired
-
private FreeMarkerProperties properties;
-
-
private void writerProperties(FreeMarkerConfigurer config) {
-
config.setTemplateLoaderPaths(
this.properties.getTemplateLoaderPath());
-
config.setPreferFileSystemAccess(
this.properties.isPreferFileSystemAccess());
-
config.setDefaultEncoding(
this.properties.getCharsetName());
-
Properties settings =
new Properties();
-
settings.putAll(
this.properties.getSettings());
-
config.setFreemarkerSettings(settings);
-
}
-
-
private void setAutoImport(String autoImport,Configuration configuration) throws Exception {
-
if(
"_".equals(autoImport.trim())) {
-
return;
-
}
-
String[] imports = autoImport.split(
";");
-
Map<String,String> importMap =
new HashMap<String,String>(imports.length);
-
for (String s : imports) {
-
String[] keyValue = s.split(
"as");
-
if (keyValue.length !=
2) {
-
log.error(
"freemarker配置auto_import格式不正确 ");
-
throw
new ConfigException(
"freemarker配置auto_import格式不正确");
-
}
-
importMap.put(keyValue[
1].trim(),keyValue[
0].trim());
-
}
-
configuration.setAutoImports(importMap);
-
}
-
-
private void setAutoInclude(final String autoInclude,Configuration configuration) {
-
if (
"_".equals(autoInclude.trim())) {
-
return;
-
}
-
String[] includes = autoInclude.split(
";");
-
for (String s : includes) {
-
System.out.println(s);
-
}
-
List list =
new ArrayList<String>(Arrays.asList(includes));
-
configuration.setAutoIncludes(list);
-
}
-
}
4.页面引用:
${s.base}或者使用${request.contextPath}