Does Freemarker have integration for JodaTime?

Are there any ways to easily format Joda DateTime objects in Freemarker? For example, with Java dates, we could use string and other directives.

I know I can call toDate and get a Java Date, but I was hoping there was a better way.

+3
source share
4 answers

You can call the method toString(String pattern)directly from Freemarker:

${dateTime.toString('MM-dd-yy')}

(not verified)

+8
source

There is an even simpler way to do this if you do not want to splash toString('MM-dd-yy')across all of your patterns.

Just add Freemarker DefaultObjectWrapperso that it understands Joda Time out of the box:

public class JodaAwareObjectWrapper extends DefaultObjectWrapper {

  @Override
  public TemplateModel wrap(final Object obj) throws TemplateModelException {
    if (obj == null) { return super.wrap(obj); }
    if (obj instanceof LocalDate) { return new SimpleDate(((LocalDate) obj).toDate(), TemplateDateModel.DATE); }
    // add support for all desired types here...
    return super.wrap(obj);
  }
}

FreeMarker, FreeMarker

Configuration config = // ...
config.setObjectWrapper(new JodaAwareObjectWrapper());

, FreeMarkers, ${dateTime?date}

+8

, Freemarker JodaTime. , ..

"MyCustomJodaFormatterBean", (String pattern, DateTime dateTime). .

root.put( "joda", MyCustomJodaFormatterBean());

freemarker

${joda.format("MM-dd-yyy", dateTime)}
+3

FTL freemarker . , java.util.Date freemarker.template.SimpleDate. org.joda.time.DateTime, freemarker, freemarker.ext.beans.StringModel, DateTime toString().

, , FTL, :

med.expiryDate?date <= today?date

"med.expiryDate" DateTime. "med.expiryDate" freemarker.ext.beans.StringModel, "med.expiryDate? date" freemarker.template.Configuration dateFormat. , dateFormat DateTime.toString().

, Freemarker , DateTime , . wapper:

/**
 * Wrapper to make freemarker identify org.joda.time.DateTime objects as date.
 * User: evvo
 * Date: 5/26/2016
 * Time: 18:21
 */
public class DateTimeAwareObjectWrapper extends DefaultObjectWrapper {

   @Override
   public TemplateModel wrap(Object obj) throws TemplateModelException {
      if (obj instanceof DateTime) {
         return new SimpleDate(((DateTime) obj).toDate(), getDefaultDateType());
      }
      return super.wrap(obj);
   }
}

freemarker

configuration.setObjectWrapper(new DateTimeAwareObjectWrapper());

, ? string DateTime.

+2

All Articles