首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >几个jars中的freemarker模板

几个jars中的freemarker模板
EN

Stack Overflow用户
提问于 2011-07-29 16:50:24
回答 2查看 6K关注 0票数 8

如何将freemarker配置为在多个jars中搜索模板?有了弹簧。

代码语言:javascript
复制
<!-- 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

工作。

代码语言:javascript
复制
ModelAndView mav = new ModelAndView();
mav.setViewName("simple");

不工作。找不到test.ftl

代码语言:javascript
复制
ModelAndView mav = new ModelAndView();
mav.setViewName("test");

如果设置为:

代码语言:javascript
复制
<property name="templateLoaderPaths" value="classpath:/freemarker/,classpath:/freemarker2/" />

One.war

/freemarker/simple.ftl

Two.jar

/freemarker2/test.ftl

工作。

代码语言:javascript
复制
ModelAndView mav = new ModelAndView();
mav.setViewName("simple");

工作。

代码语言:javascript
复制
ModelAndView mav = new ModelAndView();
mav.setViewName("test");

还有问题!如何将freemarker配置为在同一路径(classpath:/freemarker/)中搜索多个jars(wars)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-01 12:22:45

我找到解决方案了!关闭preferFileSystemAccess以始终通过SpringTemplateLoader加载。

代码语言:javascript
复制
    <!-- 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加载(即,作为流,而不会对模板更改进行热检测)。

票数 10
EN

Stack Overflow用户

发布于 2011-07-29 19:23:33

有一次,我以编程的方式做了类似的事情:

代码语言:javascript
复制
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“的第二个搜索路径。

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

希望能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6870750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档