FreemarkerConfigurer中的Freemarker WebappTemplateLoader

时间:2013-02-19 11:30:00

标签: spring-mvc freemarker

任何人都有关于如何在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文件中对其进行硬编码。

任何建议都将不胜感激。

谢谢 卡门

1 个答案:

答案 0 :(得分: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/");
        ...
    }

    ...
}