我看过一些与在Grails中使用g:datePicker相关的帖子。使用它看起来你可以像params.myDate一样从params中选择值。
然而,当我在我看来尝试做这样的事情时:
视图:
<g:link controller="c" action="a" params="[fromDate:(new Date())]">
控制器:
def dateval = params.fromDate as Date
日期未正确解析。我还应该在视图中做些什么来使控制器使日期“可解析”。我环顾四周,并没有在任何没有使用datePicker的帖子中找到这个。
答案 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')