0

任何人都有关于如何在 FreemarkerConfigurer 中使用 Freemarker WebappTemplateLoader 的示例?

我将 Freemarker 与 Spring MVC 一起使用并扩展 FreeMarkerConfigurer 以添加各种模板加载器,我还想添加一个 Web 应用程序加载器以在 Web 应用程序上下文中加载模板。但我不知道如何为其构造函数获取 servletcontext 参数。

public class DesktopFreeMarkerConfigurer extends FreeMarkerConfigurer{  

@Override
protected void postProcessConfiguration(Configuration config){
    [...]
        /* Get templates from the webapp/servlet context */
    WebappTemplateLoader watl = new WebappTemplateLoader(<servletContext>, "default/ftl/");
    [...]
    }
}

我想将 webapp/default/ftl 添加到模板加载路径,但由于它可能是动态/可配置的,我无法在 xml 文件中对其进行硬编码。

任何建议将不胜感激。

谢谢卡门

4

1 回答 1

0

我假设您将 DesktopFreeMarkerConfigurer 定义为 spring bean。在这种情况下,获取 servlet 上下文应该很简单。只需在 DesktopFreeMarkerConfigurer 类中定义它:

@Autowired private ServletContext context;

或者,如果您选择,您也可以使其实现 ServletContextAware :

public class DesktopFreeMarkerConfigurer extends FreeMarkerConfigurer implements ServletContextAware {
    private ServletContext servletContext;

    public void setServletContext(ServletContext servletContext) {
        this.servletContext = servletContext;
    }

    @Override
    protected void postProcessConfiguration(Configuration config){
        WebappTemplateLoader watl = new WebappTemplateLoader(this.servletContext, "default/ftl/");
        ...
    }

    ...
}
于 2013-03-13T16:39:37.323 回答