Проблема в том, что Spring не знает, где искать файл spring.ftl
: это моя пользовательская конфигурация для проекта MVC с использованием Boot
/**
* Otras configuraciones de la aplicaciones web, incluyendo algunas definidas en
* xml. Usar @ImportResource("classpath:/extra-config.xml") en caso de quererse
* importar configuracion en xml
*/
@Configuration
@PropertySource("classpath:application.properties")
public class WebAppConfig
{
@Autowired
private ServletContext context;
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer placeHolderConfigurer = new PropertySourcesPlaceholderConfigurer();
return placeHolderConfigurer;
}
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() throws IOException, TemplateException
{
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer()
{
@Override
protected void postProcessConfiguration(freemarker.template.Configuration config) throws IOException, TemplateException
{
WebappTemplateLoader WebAppTplLoader = new WebappTemplateLoader(context, "/WEB-INF/ftl");
ClassTemplateLoader classTplLoader = new ClassTemplateLoader(context.getClassLoader(), "/templates");
ClassTemplateLoader baseMvcTplLoader = new ClassTemplateLoader(FreeMarkerConfigurer.class, "");
MultiTemplateLoader mtl = new MultiTemplateLoader(new TemplateLoader[]
{
WebAppTplLoader,
classTplLoader,
baseMvcTplLoader
});
config.setTemplateLoader(mtl);
}
};
configurer.setDefaultEncoding("UTF-8");
configurer.setPreferFileSystemAccess(false);
return configurer;
}
@Bean
public FreeMarkerViewResolver viewResolver()
{
FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
viewResolver.setExposeSpringMacroHelpers(true);
viewResolver.setExposeRequestAttributes(true);
viewResolver.setPrefix("");
viewResolver.setSuffix(".ftl");
viewResolver.setContentType("text/html;charset=UTF-8");
return viewResolver;
}
}
Первые 2 загрузчика позволяют загружать .ftl
шаблоны в war
файлах из "/ WEB-INF / ftl" и из обычных jar
файлов из src/resources/templates
.Если вы хотите использовать теги безопасности в freemarker, то вот эти две строки:
viewResolver.setExposeSpringMacroHelpers(true);
viewResolver.setExposeRequestAttributes(true);
и загрузчик baseMvcTplLoader
для получения spring.ftl
из org.springframework.web.servlet.view.freemarker
.Я советую изучить шаблоны ftl в некоторых примерных проектах или документации , чтобы иметь представление о том, как spring.ftl
работает.
Конфигурация заполнителя:не относится к конфигурации freemarker, но очень полезен для ввода значений в переменные из src/resources/application.properties
с помощью аннотации @Value
.
При этом вы можете использовать все spring мощность в freemarker шаблонов.