几个jar子里的freemarker模板
如何配置freemarker来搜索几个jar子中的模板? 随着spring。
一个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");
如果设置为:
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在同一路径中的几个jar(war)中搜索(classpath:/ freemarker /)?
我找到了解决方案 关闭preferFileSystemAccess以始终通过SpringTemplateLoader加载。
public void setPreferFileSystemAccess (boolean preferFileSystemAccess)
设置是否更喜欢文件系统访问以进行模板加载。 文件系统访问可以热检测模板更改。
如果启用此选项,FreeMarkerConfigurationFactory将尝试将指定的“templateLoaderPath”解析为文件系统资源(这也适用于扩展的类路径资源和ServletContext资源)。
默认为“true”。 将其关闭以始终通过SpringTemplateLoader加载(即作为流,无需热模板更改检测),如果某些模板驻留在扩展类目录中而其他模板驻留在jar文件中,则可能需要这样做。
一旦我以编程方式执行类似的操作:
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的基类。
Number 1将模板的搜索路径设置为当前servlet上下文中的{{WEB-INF / templates}}。 Number 2设置子包“templates”的第二个搜索路径。
您可以添加更多模板路径。
希望能帮助到你。