开发者

Does Grails have a built-in way to bind a string to a date for a single bean property?

开发者 https://www.devze.com 2023-03-30 10:59 出处:网络
I know that it\'s possible to register a custom property editor, as demonstrated here. It is my understanding that this will cause all properties for the registered type to be bound using that custom

I know that it's possible to register a custom property editor, as demonstrated here. It is my understanding that this will cause all properties for the registered type to be bound using that custom editor.

(Perhaps that's a misunderstanding on my part? If so, enlighten me!)

However, what if I only want to register a custom editor for a single property on a given domain?

Example:

class MyCommand {
    Date foo // bind this using a custom format, e.g. 'yyyy-MM-dd'
    Date bar // bind this using the normal 'struct' date picker fields
}

class MyController {
    def myAc开发者_如何学JAVAtion = { MyCommand command ->
        // params has [foo: '2011-01-01', bar: 'struct', ...]
        // which get bound to command as above
    }
}

Does Grails have a built-in way to do this?


I know that it's possible to register a custom property editor, as demonstrated here. It is my understanding that this will cause all properties for the registered type to be bound using that custom editor.

AFAIK, this is correct

However, what if I only want to register a custom editor for a single property on a given domain?

If you're using Grails 2.3.0 or later, you can do this like so:

class MyCommand {
    @BindingFormat('yyyy-MM-dd')
    Date foo // bind this using a custom format, e.g. 'yyyy-MM-dd'
    Date bar // bind this using the normal 'struct' date picker fields
}


You could write getter and setters that take the format you want and return the format you want. The DateFormatter or SimpleDateFormatter classes would be useful in your get/set methods.


You can still use the neat trick for dates in grails:

<g:form>
    <g:hiddenField name="myDomainInstance.bar_year" value="2011"/>
    <g:hiddenField name="myDomainInstance.bar_month" value="07"/>
    <g:hiddenField name="myDomainInstance.bar_day" value="01"/>
    <g:textField name="myDomainInstance.bar_hour" value=""/>
    <g:textField name="myDomainInstance.bar_minute" value=""/>
</g:form>

In controller:

myDomainInstance.properties = params.myDomainInstance

Will result in the desired date for bar.

0

精彩评论

暂无评论...
验证码 换一张
取 消