Customizing datetime picker elements

By default all Date properties will result in a DateTimeFormElement which is rendered as a date time picker. The form element can be customized through the DateTimeFormElementConfiguration class. The default configuration is determined based on the presence of @Temporal annotations on the property. The date picker supports 3 major modes: date, time and timestamp (date + time) with minutes being the maximum resolution. The presence of @Past and @Future validation annotations will additionally restrict the dates that are selectable.

A specific date picker format can easily be specified by putting a DateTimeFormElementConfiguration.Format attribute. Advanced customization can be done by setting a complete DateTimeFormElementConfiguration as attribute. Dynamic configuration (for example setting the first selectable date relative to the current date) can only be done by specifying a DateTimeFormElementBuilder manually and adding a custom post processor that modifies the DateTimeFormElementConfiguration. A DateTimeFormElementConfiguration is always duplicated when creating an element so it is safe for post processors to modify the instance.

Using dates with TemporalType.TIME and JPA

A property of type java.util.Date but annotated with @Temporal(TemporalType.TIME) will result in only time selection being available (hours and minutes). However the @Temporal annotation also influences how JPA will persist the data type. If your type was created as a timestamp in the database schema, this might result in conversion errors. With Hibernate you can resolve this by additionally specifying a @Type annotation forcing the type to be persisted as timestamp.

Example of a required time property that is written as a date relative to start of epoch time in the database
@NotNull
@Column(name = "arrival_time")
@Temporal(TemporalType.TIME)
@Type( type = "timestamp")
private Date arrivalTime;