Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 无法使用multipartResolver加载freemarker模板_Spring Mvc_Freemarker - Fatal编程技术网

Spring mvc 无法使用multipartResolver加载freemarker模板

Spring mvc 无法使用multipartResolver加载freemarker模板,spring-mvc,freemarker,Spring Mvc,Freemarker,我正在使用Spring MVC应用程序中通过类路径配置的MultipartFile: <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="1000000"/> </bean> <bean id="M

我正在使用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>
但是当我运行它时,我得到一个错误:模板类路径:myTemplate.txt找不到

我尝试使用:
cfg.setDirectoryForTemplateLoading(myTemplate.getFile().getParentFile())
来确定目录,但也没有帮助


任何想法…?

从引用的错误消息中,我想
myTemplate.getFilename()
返回
classpath:myTemplate.txt
,而不是
myTemplate.txt
。这就解释了为什么即使将模板目录设置为
myTemplate.getFile().getParentFile()
,它也不起作用


但这里更根本的问题是,您似乎误用了FreeMarker API。
配置
对象通常在应用程序生命周期中创建一次。这是因为它包含模板缓存。如果您不使用模板缓存,那么您最好将模板加载到
字符串
,并使用
模板
类构造函数创建
模板
。(但是,如果它
#包含
-s或
#导入
-s其他模板,那么对于该FreeMarker,它将在内部调用
cfg.getTemplate
)。如果您想使用
cfg.getTemplate
(以及缓存),那么您可能应该使用理解这些Spring资源名称的
TemplateLoader
,然后配置FreeMarker以使用它(
cfg.setTemplateLoader(yourTemplateLoader)
)。我不知道Spring是否已经包含了这样的东西,但一般来说,将存储API封装到
TemplateLoader
接口并不困难。(从长远来看,这肯定比试图“欺骗”FreeMarker加载带有临时
setDirectoryForTemplateLoading
等的模板更容易、更健壮。)

我只创建了一次配置对象,这里这样显示是为了尝试简化我正在尝试的操作。我想缩小我的问题范围是:如何在freemarkerAs中使用Spring资源文件作为模板据我所见,在Spring中有一个
ResourceLoader
,它可以将资源字符串解析为
Resource
对象。因此,您应该实现一个
TemplateLoader
,它委托给
ResourceLoader
。(当然,除非Spring FreeMarker支持已经实现了这一点。)然后使用
cfg.setTemplateLoader(yourResourceTemplateLoader)
。我希望避免开发自己的TemplateLoader。当然有一种方法可以告诉Freemarker从类路径加载模板?确实有,但是Spring资源字符串并不总是以“classpath:”开头,还有谁知道ClassLoader使用的是什么。因此,我的猜测仍然是,最简单、最干净的事情就是将
ResourceLoader
包装到
TemplateLoader
接口中。也许你已经花了比清洁解决方案更多的时间来寻找解决方案。
    public class MyController
    {
        private Resource myTemplate;

        ....

        Configuration cfg = new Configuration();
        Template tpl = cfg.getTemplate(myTemplate.getFilename());