2013-07-19 15 views
14

すべてのテンプレートはデータベースに保存されています。そして、私はデータベースからテンプレートの内容を取り出し、freemarkerでマークアップしなければなりません。最終出力はテキストボックスに表示されます。FreeMarkerの入力として文字列を渡すには?

しかし、私はファイル名の代わりに文字列を送ることができる方法論を見つけることができません。

お勧めします。

答えて

24

あなたはStringReaderTemplateコンストラクタにテンプレートを渡すことができます:あなたは良いパフォーマンスをしたい場合は、 `Configuration`を再作成するべきではない(または再構成された)ことを

// Get your template as a String from the DB 
    String template = getTemplateFromDatabase(); 
    Map<String, Object> model = getModel(); 

    Configuration cfg = new Configuration(); 
    cfg.setObjectWrapper(new DefaultObjectWrapper()); 

    Template t = new Template("templateName", new StringReader(template), cfg); 

    Writer out = new StringWriter(); 
    t.process(model, out); 

    String transformedTemplate = out.toString(); 
+3

注各テンプレートの前に処理;それはシングルトンでなければなりません。また、テンプレートを何度も再解析すると(文字列の場合)、アプリケーションによっては遅すぎることがあります。その場合、FreeMarkerが 'Template'オブジェクトをキャッシュするので、データベースから名前でテンプレートを読み込むカスタム' TemplateLoader'( 'cfg.setTemplateLoader')を使うことができます。 (もちろん、 'Template'-sを再利用するための独自のキャッシング機構を書くことができます。) – ddekany

+1

Freemarkerの最新バージョンでは、' StringReader'でラップすることなく文字列を渡すことができるようです。 –

+0

ユーザーがテンプレートをテストできるようにしようとしている場合IEには、システムを使用する2つの方法があります。通常のユースケースは、データベースからロードすることです(カスタムTemplateLoaderがあります)が、テンプレートを編集するときにテンプレートをテストできるようにしたいと考えています。私は最初のケースで自分のシングルトンインスタンスを持っていますが、後者のケースでは 'Configuration'を新しくするのは妥当でしょうか? – user2573153

関連する問題