从控制器中的参数绑定 Grails 日期 [英] Binding a Grails date from params in a controller

查看:28
本文介绍了从控制器中的参数绑定 Grails 日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么通过 grails 控制器中的参数从视图中提取日期如此困难?

我不想像这样手动提取日期:

instance.dateX = parseDate(params["dateX_value"])//parseDate 来自我的辅助类

我只想使用instance.properties = params.

在模型中,类型是 java.util.Date,在参数中是所有信息:[dateX_month: 'value', dateX_day: 'value', ...]

我在网上搜索,没有找到任何相关信息.我希望 Grails 1.3.0 可以提供帮助,但还是一样.

我不能也不会相信手动提取日期是必要的!

解决方案

Grails Version >= 2.3

Config.groovy 中的设置定义了将参数绑定到 Date

时将在应用程序范围内使用的日期格式

grails.databinding.dateFormats = ['MMddyyyy', 'yyyy-MM-dd HH:mm:ss.S', "yyyy-MM-dd'T'hh:mm:ss'Z'"]

grails.databinding.dateFormats 中指定的格式将按照它们包含在列表中的顺序进行尝试.

您可以使用 @BindingFormat

覆盖单个命令对象的这些应用程序范围的格式

import org.grails.databinding.BindingFormat类人{@BindingFormat('MMddyyyy')出生日期日期}

Grails 版本2.3

<块引用>

我不能也不会相信手动提取日期是必要的!

你的固执得到了回报,早在 Grails 1.3 之前就可以直接绑定日期了.步骤是:

(1) 创建一个为您的日期格式注册编辑器的类

import org.springframework.beans.PropertyEditorRegistrar导入 org.springframework.beans.PropertyEditorRegistry导入 org.springframework.beans.propertyeditors.CustomDateEditor导入 java.text.SimpleDateFormat公共类 CustomDateEditorRegistrar 实现 PropertyEditorRegistrar {public void registerCustomEditors(PropertyEditorRegistry registry) {String dateFormat = 'yyyy/MM/dd'registry.registerCustomEditor(Date, new CustomDateEditor(new SimpleDateFormat(dateFormat), true))}}

(2) 通过在 grails-app/conf/spring/resources.groovy

中注册以下 bean 使 Grails 知道这个日期编辑器

beans = {customPropertyEditorRegistrar(CustomDateEditorRegistrar)}

(3) 现在,当您在名为 foo 的参数中以 yyyy/MM/dd 格式发送日期时,它将自动成为使用以下任一方法绑定到名为 foo 的属性:

myDomainObject.properties = params

new MyDomainClass(params)

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 a Date

grails.databinding.dateFormats = [
        'MMddyyyy', 'yyyy-MM-dd HH:mm:ss.S', "yyyy-MM-dd'T'hh:mm:ss'Z'"
]

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

import org.grails.databinding.BindingFormat

class Person { 
    @BindingFormat('MMddyyyy') 
    Date birthDate 
}

Grails Version < 2.3

i can't and will not belief that extracting the date by hand is nessesary!

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

import org.springframework.beans.PropertyEditorRegistrar
import org.springframework.beans.PropertyEditorRegistry
import org.springframework.beans.propertyeditors.CustomDateEditor
import java.text.SimpleDateFormat

public class CustomDateEditorRegistrar implements PropertyEditorRegistrar {

    public void registerCustomEditors(PropertyEditorRegistry registry) {

        String dateFormat = 'yyyy/MM/dd'
        registry.registerCustomEditor(Date, new CustomDateEditor(new SimpleDateFormat(dateFormat), true))
    }
}

(2) Make Grails aware of this date editor by registering the following bean in grails-app/conf/spring/resources.groovy

beans = {
    customPropertyEditorRegistrar(CustomDateEditorRegistrar)
}

(3) Now when you send a date in a parameter named foo in the format yyyy/MM/dd it will automatically be bound to a property named foo using either:

myDomainObject.properties = params

or

new MyDomainClass(params)

这篇关于从控制器中的参数绑定 Grails 日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆