2013-03-28 115 views
1

在我的應用程序,所有的freemarker模板是/模板/ FTL /所以應用程序部署期間我打開一個類我稱之爲擴展FreemarkerManager並有一個方法Freemarker模板裝載

Configuration configuration = super.createConfiguration(servletContext); 
configuration.setDirectoryForTemplateLoading(new File("/templates/ftl/")); 

這樣一類當我需要加載一個模板文件,我可以簡單地做這樣的:

ServletContext servletContext = ServletActionContext.getServletContext(); 
    Configuration configFreemarker = (Configuration) servletContext 
        .getAttribute("freemarker.Configuration"); 
    Template template = configFreemarker.getTemplate("pathToMyTemplate"); 

在只有一個特定的情況下,我需要得到來自完全不同的道路(不是/模板/ FTL模板/)。

如何在此特定時刻爲模板加載聲明第二個目錄而不破壞所有調用舊路徑的現有代碼?我可以同時有兩個不同的模板加載起點嗎?

謝謝

+0

也許只是建立一個沒有獨立的(或臨時)配置特定的目錄? – 2013-03-28 08:46:37

+0

我看不到怎麼可能實例化2配置,因爲我的類需要擴展FreemarkerManager,在那裏我需要擴展我已經做了第一次的createConfiguration方法。裏面我得到配置conf = super.createConfiguration(servletContext);但我沒有看到我怎麼能得到相同的servletContext – gospodin 2013-03-28 09:13:50

回答

7

您可以使用MultipleTemplateLoader

import freemarker.cache.*; // template loaders live in this package 

... 

FileTemplateLoader ftl1 = new FileTemplateLoader(new File("/tmp/templates")); 
FileTemplateLoader ftl2 = new FileTemplateLoader(new File("/usr/data/templates")); 
ClassTemplateLoader ctl = new ClassTemplateLoader(getClass(), ""); 
TemplateLoader[] loaders = new TemplateLoader[] { ftl1, ftl2, ctl }; 
MultiTemplateLoader mtl = new MultiTemplateLoader(loaders); 

cfg.setTemplateLoader(mtl); 

來源:Freemarker Manual

+0

多數民衆贊成它的第二次配置。謝謝!! – gospodin 2013-03-28 14:59:58

0

另一個和更優雅的方式(在我看來)這樣做的是配置XML中:

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
    <property name="templateLoaderPaths"> 
     <value>/path1/ , /path2/</value> 
    </property> 
</bean>