Why is it so hard to extract the date from the view via the params in a grails controller?
I don't want to extract the date by hand like this:
instance.dateX = parseDate(params["dateX_value"])//parseDate is from my helper class
I just want to use instance.properties = params
.
In the model the type is java.util.Date
and in the params is all the information: [dateX_month: 'value', dateX_day: 'value', ...]
I searched on the net and found nothing on this. I hoped that Grails 1.3.0 could help but still the same thing.
I can't and will not believe that extracting the date by hand is necessary!
Grails Version >= 2.3
A setting in
Config.groovy
defines the date formats which will be used application-wide when binding params to aDate
The formats specified in
grails.databinding.dateFormats
will be attempted in the order in which they are included in the List.You can override these application-wide formats for an individual command object using
@BindingFormat
Grails Version < 2.3
Your stubbornness is rewarded, it has been possible to bind a date directly since long before Grails 1.3. The steps are:
(1) Create a class that registers an editor for your date format
(2) Make Grails aware of this date editor by registering the following bean in
grails-app/conf/spring/resources.groovy
(3) Now when you send a date in a parameter named
foo
in the formatyyyy/MM/dd
it will automatically be bound to a property namedfoo
using either:or
Grails 2.1.1 has new method in params for easy null safe parsing.
Find it in doc here
Grails Version >= 3.x
You can set in application.yml the date formats following this syntax:
Have you tried using any of the Grails date picker plugins?
Ive had good experiences with the calendar plugin.
(When using the calendar plugin) When you submit the request of the date selection you can automatically bind the query parameter to the domain object you want to populate with the request.
E.g.
You can also parse a "yyyy/MM/dd" date string like so...
Grails Version >= 2.3
A localeAware version to convert strings to date
In src/groovy:
In conf/spring/resources.groovy:
The bean's name 'defaultDateConverter' is really important (to override the default date converter)
@Don Thanks for the answer above.
Here's an alternative to the custom editor that checks first date time then date format.
Groovy, just add semi colons back in for java