Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Write freemarker template to String output

I would like to have freemarker template output in String. I have a freemarker template file commonTemplate.ftl.

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

And Java code which populates model and prints output to console 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;
    }
}

It works for console output.

<div>
    <div>
        <h1>john Doe</h1>
        1990-01-10T12:11+01:00[Europe/Prague]  1
    </div>
</div>
like image 527
Yan Khonski Avatar asked Feb 01 '17 10:02

Yan Khonski


2 Answers

Hope this works.

// 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();
like image 177
Sainath Batthala Avatar answered Oct 10 '22 02:10

Sainath Batthala


    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);
    }
like image 31
Yan Khonski Avatar answered Oct 10 '22 01:10

Yan Khonski