2017-02-01 64 views
2

我想在String中使用freemarker模板輸出。 我有一個freemarker模板文件commonTemplate.ftl將freemarker模板寫入字符串輸出

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

和填充模式和打印輸出Java代碼來安慰App.java

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; 
    } 
} 

它適用於控制檯輸出。

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

回答

8

希望這個作品。

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

是的,它的工作,謝謝。 –

+0

如果數據包含需要UTF-8編碼的特殊字符,該怎麼辦?在這種情況下,結果將包含'?'字符。我們如何解決這個問題? – 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

如果數據包含需要UTF-8編碼的特殊字符怎麼辦?在這種情況下,結果將包含'?'字符。我們如何解決這個問題? – Aman