Using ‘.’ Operator, we can access the nested objects.
For example, a User instance has address details nested in it. We can map the user address in template below.
street: ${user.address.street}
city: ${user.address.city}
country: ${user.address.country}
Find the below working application.
Step 1: Create userDetails.ftl file under src/main/resources folder.
userDetails.ftl
name: ${user.name}
age: ${user.age}
street: ${user.address.street}
city: ${user.address.city}
country: ${user.address.country}
Step 2: Define Address model class.
Address.java
package com.sample.app.templates.model;
public class Address {
private String street;
private String city;
private String country;
public Address(String street, String city, String country) {
super();
this.street = street;
this.city = city;
this.country = country;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
Step 3: Define UserDetails class.
UserDetails.java
package com.sample.app.templates.model;
public class UserDetails {
private String name;
private int age;
private Address address;
public UserDetails(String name, int age, Address address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
Step 4: Define ‘FreeMarkerUtil’ class that take model class and template file as input and merge them.
FreeMarkerUtil.java
package com.sample.app.util;
import java.io.StringWriter;
import java.util.Locale;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
public class FreeMarkerUtil {
private static final Configuration FREE_MARKER_CONFIGURATION = new Configuration(Configuration.VERSION_2_3_30);
static {
FREE_MARKER_CONFIGURATION.setClassForTemplateLoading(FreeMarkerUtil.class, "/templates/");
FREE_MARKER_CONFIGURATION.setDefaultEncoding("UTF-8");
FREE_MARKER_CONFIGURATION.setLocale(Locale.US);
FREE_MARKER_CONFIGURATION.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
}
public static StringWriter mergeModelAndTemplate(Object modelObject, String ftlFile) throws Exception {
StringWriter stringWriter = new StringWriter();
Template template = FREE_MARKER_CONFIGURATION.getTemplate(ftlFile);
template.process(modelObject, stringWriter);
return stringWriter;
}
}
Step 5: Define ‘UserDetailsPopulator’ class.
UserDetailsPopulator.java
package com.sample.app;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import com.sample.app.templates.model.Address;
import com.sample.app.templates.model.UserDetails;
import com.sample.app.util.FreeMarkerUtil;
public class UserDetailsPopulator {
public static void main(String args[]) throws Exception {
Map<String, Object> modelObject = new HashMap<String, Object>();
Address address = new Address("Chowdeswarit Steet", "Bangalore", "India");
modelObject.put("user", new UserDetails("Krishna", 31, address));
StringWriter stringWriter = FreeMarkerUtil.mergeModelAndTemplate(modelObject, "userDetails.ftl");
System.out.println(stringWriter);
}
}
Output
name: Krishna
age: 31
street: Chowdeswarit Steet
city: Bangalore
country: India
No comments:
Post a Comment