Freemarker没有加载远程模板

时间:2016-02-03 07:51:39

标签: spring-mvc freemarker

我正在使用Spring MVC和freemarker作为我的视图解析器,(不重要)我有多个模板加载器定义如下:

    <bean id="urlTemplateLoader" class="com.URLTemplateLoader">
        <property name="baseUrl" value="http://xxxx:8080/ftl/"/>
    </bean>

    <bean id="defaultTemplateLoader" class="com.WebappTemplateLoader">
        <property name="templateLoaderPath" value="/WEB-INF/ftl/" /> 
    </bean>

    <bean id="multiTemplateLoader" class="freemarker.cache.MultiTemplateLoader">
        <constructor-arg>
          <list>
            <ref bean="urlTemplateLoader"/>   
            <ref bean="defaultTemplateLoader"/> 
          </list>
        </constructor-arg>
    </bean>

这是为了首先检查CMS服务器,然后使用本地文件。视图解析器的定义如下:

    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="preTemplateLoaders" ref="multiTemplateLoader"/>  
        <property name="freemarkerSettings">
            <props>
                <prop key="default_encoding">UTF-8</prop>
                <prop key="localized_lookup">false</prop>
                <prop key="date_format">yyyy-MM-dd</prop>
                <prop key="template_update_delay">0</prop>
            </props>
        </property>  
    </bean>

现在的问题是,如果文件不在远程服务器上,当它第一次找到它时,它永远不会再次检查,直到服务器重新启动。我将template_update_delay设置为0,所以一旦它在那里,任何时候我更新它,它会自动拉出新的,这很棒,但是我怎么能让它再次检查它是否首先不在那里?

1 个答案:

答案 0 :(得分:1)

正如MultiTemplateLoader的JavaDoc所说:

  

在每个请求中,按照它们在提供给构造函数的加载器数组中的外观顺序查询加载器。但是,如果某个模板名称的请求过去已被其中一个加载器满足,则首先查询该加载程序(软关联)。

我将在2.3.24(预计在3月初)中添加sticky属性(启用/禁用&#34;软亲和力&#34;),但我无法更改默认为3.0.0或类似的东西。同时,您可以使用自定义TemplateLoader执行此操作(复制粘贴MultiTemplateLoader的源代码,只删除它的亲和力部分......应该很容易)。