如何在Grails中将Date值作为参数传递

时间:2011-05-19 15:39:22

标签: date grails groovy params

我看过一些与在Grails中使用g:datePicker相关的帖子。使用它看起来你可以像params.myDate一样从params中选择值。

然而,当我在我看来尝试做这样的事情时:

视图:

<g:link controller="c" action="a" params="[fromDate:(new Date())]">

控制器:

def dateval = params.fromDate as Date

日期未正确解析。我还应该在视图中做些什么来使控制器使日期“可解析”。我环顾四周,并没有在任何没有使用datePicker的帖子中找到这个。

3 个答案:

答案 0 :(得分:8)

我更喜欢从客户端发送时间而不是日期。

<g:link controller="c" action="a" params="[fromDate:(new Date().time)]">

在行动中,我使用了需要时间的Date构造函数。

def date = params.date

date = date instanceof Date ? date : new Date(date as Long)

我在DateUtil类中创建了一个方法来处理这个问题。这对我来说很好。

答案 1 :(得分:4)

当参数发送到控制器时,它们将作为字符串发送。以下将无法正常工作

def dateval = params.fromDate as Date

因为您尚未指定用于将字符串转换为日期的日期格式。将以上内容替换为:

def dateval = Date.parse('yyyy/MM/dd', params.fromDate)

显然,如果您的日期未以yyyy/MM/dd格式发送,则需要更改第二个参数。或者,您可以自动进行此转换by registering a custom date editor

答案 2 :(得分:2)

从视图发送的是一个字符串,因此params.fromDate as Date不起作用。

在grails 2.x中,日期方法被添加到params对象,以便轻松,安全地解析日期,例如

def dateval = params.date('fromDate', 'dd-MM-yyyy')

或者您也可以传递日期格式列表,例如

def dateval = params.date('fromDate', ['yyyy-MM-dd', 'yyyyMMdd', 'yyMMdd'])

或者可以通过密钥date.myDate.format从messages.properties中读取格式,并使用params的日期方法

def dateval = params.date('fromDate')