我正在使用我的Spring MVC应用程序中通过类路径配置的MultipartFile:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="1000000"/>
</bean>
<bean id="MyController" class="myController">
<property name="myTemplate" value="classpath:myTemplate.txt"/>
</bean>
我正在尝试使用freemarker来加载这个模板:
public class MyController
{
private Resource myTemplate;
....
Configuration cfg = new Configuration();
Template tpl = cfg.getTemplate(myTemplate.getFilename());
但是当我运行它时,我收到一个错误:模板类路径:找不到myTemplate.txt
我尝试使用:cfg.setDirectoryForTemplateLoading(myTemplate.getFile().getParentFile())
来确定目录,但这也无济于事。
任何想法......?
答案 0 :(得分:1)
根据引用的错误消息,我认为myTemplate.getFilename()
会返回classpath:myTemplate.txt
,而不是myTemplate.txt
。即使你将模板目录设置为myTemplate.getFile().getParentFile()
,这也会使它失效。
但这里更基本的问题是你似乎滥用了FreeMarker API。通常,应在应用程序生命周期中创建一次Configuration
对象。这是因为它包含模板缓存。如果您还没有使用模板缓存,那么您也可以将模板加载到String
中,并使用Template
类构造函数创建Template
。 (但是,如果它是#include
- s或#import
- 其他模板,那么FreeMarker将在内部调用cfg.getTemplate
。)如果您想使用cfg.getTemplate
(从而也可以使用一个TemplateLoader
来理解那些Spring资源名称,然后配置FreeMarker使用它(cfg.setTemplateLoader(yourTemplateLoader)
)。我不知道Spring是否已经包含这样的东西,但一般来说,将存储API包装到TemplateLoader
接口并不困难。 (从长远来看,它比使用ad-hoc setDirectoryForTemplateLoading
等“加速模板”加载模板更容易,更强大。)