如何将freemarker配置为在多个jars中搜索模板?有了弹簧。
<!-- freemarker config -->
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPaths" value="classpath:/freemarker/" />
</bean>一个war文件(要部署)和jar文件(在依赖项中)。
One.war
/freemarker/simple.ftl
Two.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/" />One.war
/freemarker/simple.ftl
Two.jar
/freemarker2/test.ftl
工作。
ModelAndView mav = new ModelAndView();
mav.setViewName("simple");工作。
ModelAndView mav = new ModelAndView();
mav.setViewName("test");还有问题!如何将freemarker配置为在同一路径(classpath:/freemarker/)中搜索多个jars(wars)?
发布于 2011-08-01 12:22:45
我找到解决方案了!关闭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)
设置模板加载是否首选文件系统访问。文件系统访问可实现对模板更改的热检测。
如果启用此选项,FreeMarkerConfigurationFactory将尝试将指定的"templateLoaderPath“解析为文件系统资源(这也适用于扩展的类路径资源和ServletContext资源)。
默认值为true。如果您的一些模板驻留在展开的类目录中,而其他模板驻留在jar文件中,则可能需要关闭此选项以始终通过SpringTemplateLoader加载(即,作为流,而不会对模板更改进行热检测)。
发布于 2011-07-29 19:23:33
有一次,我以编程的方式做了类似的事情:
public class ControllerServlet extends HttpServlet {
private Configuration cfg;
public void init() {
cfg = new Configuration();
// 1
WebappTemplateLoader wtl = new WebappTemplateLoader(getServletContext(), "WEB-INF/templates");
// 2
ClassTemplateLoader ctl = new ClassTemplateLoader(ControllerServlet.class, "templates");
MultiTemplateLoader mtl = new MultiTemplateLoader(new TemplateLoader[] {wtl, ctl});
cfg.setTemplateLoader(mtl);
//....
}
}ControllerServlet是我真正的servlet的基类。
1号将模板的搜索路径设置为当前servlet上下文中的{{WEB-INF/ templates }}。2号设置到子包"templates“的第二个搜索路径。
您可以添加更多模板路径。
希望能有所帮助。
https://stackoverflow.com/questions/6870750
复制相似问题