In this post, I am going to explain how to load template from a string and merge it with data model.
Step 1: Define the template string.
String userDetailsTemplate = "<#-- User details -->\n" + "name: ${user.name}\n" + "age: ${user.age}\n" + "city: ${user.city}";
Step 2: Define instance of the template.
Template template = new Template("My_template", new StringReader(userDetailsTemplate), new Configuration(Configuration.VERSION_2_3_30));
Step 3: Define model object.
User user = new User("Krishna", 29, "Bangalore");
Step 4: Define root object.
Map<String, Object> rootObject = new HashMap<>();
rootObject.put("user", user);
Step 5: Process the template with rootObject.
StringWriter stringWriter = new StringWriter();
template.process(rootObject, stringWriter);
Find the below working application.
LoadDataFromString.java
package com.sample.app;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import com.sample.app.templates.model.User;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class LoadDataFromString {
public static void main(String args[]) throws Exception {
String userDetailsTemplate = "<#-- User details -->\n" + "name: ${user.name}\n" + "age: ${user.age}\n"
+ "city: ${user.city}";
Template template = new Template("My_template", new StringReader(userDetailsTemplate),
new Configuration(Configuration.VERSION_2_3_30));
User user = new User("Krishna", 29, "Bangalore");
Map<String, Object> rootObject = new HashMap<>();
rootObject.put("user", user);
StringWriter stringWriter = new StringWriter();
template.process(rootObject, stringWriter);
System.out.println(stringWriter.toString());
}
}
Output
name: Krishna
age: 29
city: Bangalore
One drawback of this approach is if you want to create templates from strings that import other templates this method doesn't work. You can solve this problem by using StringTemplateLoader.
No comments:
Post a Comment