2

私のアプリケーションでは、すべての freemarker テンプレートが /templates/ftl/ にあるため、アプリケーションのデプロイ中にクラスをロードします。FreemarkerManager を拡張し、メソッドを持つ 1 つのクラスを呼び出します。

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");

たった 1 つの特定の状況で、(/templates/ftl/ ではなく) 完全に異なるパスからテンプレートを取得する必要があります。

この特定の瞬間に、古いパスを呼び出していた既存のコードをすべて壊すことなく、テンプレートをロードするための 2 番目のディレクトリを宣言するにはどうすればよいですか? テンプレートの読み込みに同時に 2 つの異なる開始点を設定できますか?

ありがとう

4

2 に答える 2

10

使用できます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 マニュアル

于 2013-03-28T14:29:34.550 に答える