问题是 spring 不知道在哪里查看 spring.ftl 文件:
这是我使用 Boot 的 MVC 项目的自定义配置
/**
* 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 个加载器允许从 "/WEB-INF/ftl" 和常规 jar 文件从 src/resources/templates 加载 war 文件中的 .ftl 模板。
如果你想在 freemarker 中使用安全标签,重点是这两行:
viewResolver.setExposeSpringMacroHelpers(true);
viewResolver.setExposeRequestAttributes(true);
还有baseMvcTplLoader 加载程序从org.springframework.web.servlet.view.freemarker 获取spring.ftl。我建议在 example project 或 documentation 中探索 ftl 模板,以了解 spring.ftl 的工作原理。
占位符的配置与freemarker无关
配置,但它对于在变量中注入值非常有用
从src/resources/application.properties 使用@Value
注释。
有了它,您可以在 freemarker 模板中使用所有 spring 功能。