我目前正试图让Freemarker使用Spring处理我的应用程序。无论我尝试什么,我都会不断找到模板。我不确定我是否正确配置了配置,但它从未找到我的模板。这是我的spring bean配置:
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
</bean>
每当我尝试在freemaker配置上调用getTemplate时,它总是发回模板未找到错误。所以如果我这样做
configuration.getTemplate("testTemplate.ftl")
它总是抛出IOException。
我不确定是否有人知道我做错了什么。
感谢您的帮助!
答案 0 :(得分:0)
首先,/WEB-INF/freemarker
只能作为WebApplicationContext
内的路径。否则Spring会尝试将其解析为文件系统路径而不是servlet上下文路径。您在DispatcherServlet
其次,您是否有任何理由直接使用configuration
而不是使用Spring的ViewResolver
?
最后,IOException
可能意味着许多不同的事情。你可以发布完整的堆栈跟踪吗?
答案 1 :(得分:0)
我认为您必须确保文件“testTemplate.ftl”位于文件夹“/ WEB-INF / freemarker /”
答案 2 :(得分:0)
您也可以将其设置为
@Bean
public FreeMarkerConfigurationFactoryBean freemarkerConfiguration() {
FreeMarkerConfigurationFactoryBean bean = new FreeMarkerConfigurationFactoryBean();
bean.setTemplateLoaderPath("classpath:/templates/");
return bean;
}
您的情况:
<property name="templateLoaderPath" value="classpath:/WEB-INF/freemarker/"/>
答案 3 :(得分:-1)
我遇到了同样的问题,最后我决定使用以下方法:
Configuration configuration = new Configuration();
FileTemplateLoader templateLoader = new FileTemplateLoader(new File(YOUR_BASE_TEMPLATE_DIR));
configuration.setTemplateLoader(templateLoader);
freemarker.template.Template template = configuration.getTemplate(YOUR_TEMPLATE_NAME);
template.process(datamodel, writer);