如何配置 freemarker 在多个 jar 中搜索模板?有 Spring 。
<!-- freemarker config -->
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPaths" value="classpath:/freemarker/" />
</bean>
一个 war 文件(用于部署)和一个 jar 文件(在依赖项中)。
一战
/freemarker/simple.ftl
两个.jar
/freemarker/test.ftl
工作。
ModelAndView mav = new ModelAndView();
mav.setViewName("simple");
不工作。找不到 test.ftl
ModelAndView mav = new ModelAndView();
mav.setViewName("test");
如果设置为:
<property name="templateLoaderPaths" value="classpath:/freemarker/,classpath:/freemarker2/" />
一战
/freemarker/simple.ftl
两个.jar
/freemarker2/test.ftl
工作。
ModelAndView mav = new ModelAndView();
mav.setViewName("simple");
工作。
ModelAndView mav = new ModelAndView();
mav.setViewName("test");
还有问题!如何配置 freemarker 以在同一路径 (classpath:/freemarker/) 中搜索多个 jars(wars)?
最佳答案
我找到了解决方案!关闭 preferFileSystemAccess 以始终通过 SpringTemplateLoader 加载。
<!-- freemarker config -->
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPaths" value="classpath:/freemarker/" />
<property name="preferFileSystemAccess" value="false" />
</bean>
public void setPreferFileSystemAccess(boolean preferFileSystemAccess)
Set whether to prefer file system access for template loading. File system access enables hot detection of template changes.
If this is enabled, FreeMarkerConfigurationFactory will try to resolve the specified "templateLoaderPath" as file system resource (which will work for expanded class path resources and ServletContext resources too).
Default is "true". Turn this off to always load via SpringTemplateLoader (i.e. as stream, without hot detection of template changes), which might be necessary if some of your templates reside in an expanded classes directory while others reside in jar files.
关于java - 几个 jar 中的 freemarker 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6870750/