2013-07-19 16 views
14

Tüm şablonlar veritabanında saklanır. Ve bir şablonun içeriğini veritabanından almalı ve freemarker ile işaretlenmeliyim. Bitiş çıkışı bir metin kutusunda oluşturulacak.Dize FreeMarker'da giriş olarak nasıl iletilir?

Ancak, dosya adı yerine dize gönderebileceğim herhangi bir metodoloji bulamıyorum.

Lütfen öneriniz.

Bir StringReader ile Template kurucusuna şablonunuzu geçebilir

cevap

24

: Her şablonun önce iyi bir performans istiyorsanız, `Configuration` yeniden oluşturulan gerektiğini

// 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

Not (veya yapılandırılmış yeniden) işleme; Tek kişilik olmalı. Ayrıca, şablonları yeniden ve tekrar tekrar (dizge için) ayrıştırma bazı uygulamalarda çok yavaş olabilir; Bu durumda, FreeMarker 'Template' nesnelerini önbelleğe alacağından, şablonlar ismini veri tabanından yükleyen (' cfg.setTemplateLoader' ile) özel bir 'TemplateLoader' kullanılabilir. (Veya, 'Template'-s' i yeniden kullanmak için kendi önbelleğe alma mekanizmanızı yazabilirsiniz.) – ddekany

+1

Freemarker'ın en son sürümünde, bir string'i "StringReader" –

+0

içine sarmak zorunda kalmadan geçirebilirsiniz. Kullanıcıların şablonlarını test etmesine izin vermeye çalışıyorsanız? IE sistemi kullanmanın iki yolu vardır. Normal kullanım durumu veritabanından yüklenir (ve bunun için bir 'TemplateLoader' özelliğim var) ancak kullanıcıların şablonları düzenledikçe test etmelerini de istiyorum. İlk durum için singleton örneğim var, ikinci durum için 'Configuration' özelliğini güncellemek mantıklı mı? – user2573153

İlgili konular