几个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”的第二个搜索路径。

您可以添加更多模板路径。

希望能帮助到你。