2017-02-01 3 views
2

Ich möchte Freemarker Vorlage Ausgabe in String haben. Ich habe eine Freemarker Vorlage Datei commonTemplate.ftl.Schreibe Freemarker Vorlage auf String-Ausgabe

<div> 
    <div> 
     <h1>${userDetails.name}</h1> 
     ${userDetails.birthday} ${userDetails.id} 
    </div> 
</div> 

und Java-Code, der App.java zu trösten Modell und druckt Ausgang auffüllt.

public class App { 

    private Service service = new Service(); 


    public void execute() { 
     Configuration configuration = prepareConfiguration(); 
     // Load templates from resources/templatess. 
     configuration.setClassForTemplateLoading(App.class, "/templates"); 

     try { 
      Template template = configuration.getTemplate("commonTemplate.ftl"); 

      // Console output 
      Writer out = new OutputStreamWriter(System.out); 
      template.process(prepareData(), out); 
      out.flush(); 

     } catch (IOException | TemplateException e) { 
      throw new RuntimeException(e); 
     } 
    } 

    private Configuration prepareConfiguration() { 
     Configuration configuration = new Configuration(Configuration.VERSION_2_3_23); 
     configuration.setDefaultEncoding("UTF-8"); 
     configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); 
     configuration.setLogTemplateExceptions(false); 
     return configuration; 
    } 

    private Map<String, Object> prepareData() { 
     Model model = service.getModel(); 
     Map<String, Object> data = new HashMap<String, Object>(); 
     data.put("userDetails", model.getUserDetails()); 
     return data; 
    } 
} 

Es funktioniert für Konsole ausgegeben.

<div> 
    <div> 
     <h1>john Doe</h1> 
     1990-01-10T12:11+01:00[Europe/Prague] 1 
    </div> 
</div> 

Antwort

8

Hoffnung das funktioniert.

// write the freemarker output to a StringWriter 
StringWriter stringWriter = new StringWriter(); 
template.process(prepareData(), stringWriter); 

// get the String from the StringWriter 
String string = stringWriter.toString(); 
+0

Ja, es funktioniert, danke. –

+0

Was passiert, wenn Daten Sonderzeichen enthalten, die UTF-8-Codierung benötigen? In diesem Fall würde das Ergebnis "?" Figuren. Wie können wir dieses Problem lösen? – Aman

1
try { 
     Template template = configuration.getTemplate("commonTemplate.ftl"); 
     Writer out = new StringWriter(); 
     template.process(prepareData(), out); 
     System.out.println(out.toString()); 

    } catch (IOException | TemplateException e) { 
     throw new RuntimeException(e); 
    } 
+0

Was passiert, wenn Daten Sonderzeichen enthalten, die UTF-8-Codierung benötigen? In diesem Fall würde das Ergebnis "?" Figuren. Wie können wir dieses Problem lösen? – Aman

Verwandte Themen