Freemarker print date in template

前端 未结 3 1957
难免孤独
难免孤独 2021-02-08 10:10

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

3条回答
  •  被撕碎了的回忆
    2021-02-08 10:30

    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 the freemarker.template.TemplateModel interface. If you want the functionality of the ?new built-in as it existed in prior versions, make available an instance of the freemarker.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

提交回复
热议问题