2013-07-19 16 views
14

Wszystkie szablony są przechowywane w bazie danych. I muszę pobrać zawartość szablonu z bazy danych i oznaczony symbolem wolnostojącym. Wyjście końcowe zostanie wyrenderowane w polu tekstowym.Jak przekazać String jako dane wejściowe w FreeMarker?

Ale nie znajduję żadnej metodologii, za pomocą której mogę wysłać ciąg zamiast nazwy pliku.

Proszę sugerować.

Odpowiedz

24

Możesz przekazać swój szablon do konstruktora Template z StringReader:

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

pamiętać, że jeśli chcesz dobry występ The 'Configuration' nie powinny być ponownie utworzone (lub ponownie skonfigurowany) przed każdym szablonie przetwarzanie; powinien to być singleton. Również ponowne przetwarzanie szablonów w kółko (w przypadku łańcucha) może być zbyt wolne w niektórych aplikacjach; w takim przypadku można użyć niestandardowego 'TemplateLoader' (z' cfg.setTemplateLoader'), który ładuje szablony po nazwie z bazy danych, ponieważ wtedy FreeMarker będzie buforował obiekty 'Template'. (Możesz też napisać własny mechanizm buforowania, aby ponownie użyć szablonu 'Template's, oczywiście.) – ddekany

+1

W najnowszej wersji Freemarker wygląda na to, że możesz po prostu przekazać ciąg bez konieczności zawijania go w' StringReader' –

+0

Co jeśli próbujesz zezwolić użytkownikom na testowanie szablonów? IE są dwa sposoby korzystania z systemu. Normalnym przypadkiem jest ładowanie z bazy danych (i mam do tego niestandardowy "TemplateLoader"), ale chcę również, aby użytkownicy mogli testować szablony podczas ich edycji. Mam jedną instancję singleton dla pierwszego przypadku, czy uzasadnione jest nowe "Konfiguracja" dla tego ostatniego przypadku? – user2573153

Powiązane problemy