3

假设我有一个名为“foobar”的 datePicker:

<g:datePicker name="foobar" value="${new Date()}" precision="day" />

如何读取此日期选择器的提交值?

一种有效但有一些不需要的副作用的方法如下:

def newObject = new SomeClassName(params)
println "value=" + newObject.foobar

这种方式将所有提交的字段读取到 newObject 中,这是我想要避免的。我只对“foobar”字段的值感兴趣。

我最初认为可以做到这一点的方式是:

def newObject = new SomeClassName()
newObject.foobar = params["foobar"]

但 Grails 似乎不会自动将 foobar 字段转换为 Date() 对象。

更新:可以在Grails JIRA中找到更多信息。

4

4 回答 4

4

使用命令对象习语。在您的示例中,我将假设您的表单调用 action handleDate。控制器内部:


def handleDate = { FoobarDateCommand dateCommand ->
    def theNextDay = dateCommand.foobar + 1
}

这是FoobarDateCommand. 请注意您如何将字段命名为与视图中相同的名称:


class FoobarDateCommand { 
    Date foobar 
}

命令对象是封装每个表单的所有验证任务的便捷方式,使您的控制器保持美观和小巧。

于 2009-02-11T02:26:20.650 回答
2

在 Grails 1.2 中读取 g:datePicker 值变得容易得多(请参阅发行说明):

更好的日期解析

如果您从标签提交日期,现在获取 Date 对象就像从 params 对象中按名称查找一样简单(例如 params.foo )

于 2009-12-26T23:50:01.123 回答
0

当一个参数说是一个“结构”时,这意味着有许多参数来表示它的值。在您的情况下,有:

  • params["foobar_year" 存储年份
  • params["foobar_month"] 存储月份
  • params["foobar_day"] 存储日

只需将它们取出并做任何你想做的事情:)

于 2009-02-11T09:30:24.827 回答
-2

你仍然需要知道格式

def newObject = new SomeClassName()
newObject.foobar = Date.parse('yyyy-MM-dd', params.foobar)
于 2009-02-11T00:51:27.617 回答