假设我有一个名为“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 吉拉.

有帮助吗?

解决方案 2

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

更好的日期解析

如果您从标签提交日期,则获得日期对象的日期现在很简单,就像按名称从params对象查找它一样简单(例如。params.foo)

其他提示

使用 命令对象 成语。在您的示例中,我将假设您的表单调用了该操作 handleDate. 。控制器内部:


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

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


class FoobarDateCommand { 
    Date foobar 
}

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

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

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

只要把它们拿出来,做任何你想做的事:)

不过你仍然需要知道格式

def newObject = new SomeClassName()
newObject.foobar = Date.parse('yyyy-MM-dd', params.foobar)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top