I am trying to print the current date when the template is activated. I have read that I have to pass a new Date() Java object to the template, but I don\'t know how to do that
Use the ObjectConstructor API of Freemarker to create a calendar object and a formatter object, then combine the two to print the date:
<#-- Create constructor object -->
<#assign objectConstructor = "freemarker.template.utility.ObjectConstructor"?new()>
<#-- Call calendar constructor -->
<#assign clock = objectConstructor("java.util.GregorianCalendar")>
<#-- Call formatter constructor -->
<#assign mmddyy = objectConstructor("java.text.SimpleDateFormat","MM/dd/yyyy")>
<#-- Call getTime method to return the date in milliseconds-->
<#assign date = clock.getTime()>
<#-- Call format method to pretty print the date -->
<#assign now = mmddyy.format(date)>
<#-- Display date -->
${now}
The
?new
built-in, as it was implemented, was a security hole. Now, it only allows you to instantiate a java object that implements thefreemarker.template.TemplateModel
interface. If you want the functionality of the ?new built-in as it existed in prior versions, make available an instance of thefreemarker.template.utility.ObjectConstructor
class to your template. For example:
myDataModel.put("objConstructor", new ObjectConstructor());
and then in the template you can do this:
<#assign aList = objConstructor("java.util.ArrayList", 100)>)
References
Freemarker 2.3: Version History
Tag Developers Guide: Freemarker
CRUD Operations using Servlet and FreeMarker Template Engine