假设我有一个名为“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。
中找到答案 0 :(得分:4)
使用command object成语。对于您的示例,我将假设您的表单调用操作handleDate
。控制器内部:
def handleDate = { FoobarDateCommand dateCommand ->
def theNextDay = dateCommand.foobar + 1
}
这是FoobarDateCommand
。请注意您如何命名字段与视图中的相同:
class FoobarDateCommand {
Date foobar
}
命令对象是一种方便的方法,可以封装每个表单的所有验证任务,保持控制器的美观和小巧。
答案 1 :(得分:2)
在Grails 1.2中阅读g:datePicker值变得容易多了(见release notes):
更好的日期解析
如果您提交日期 标签, 获取Date对象现在为 简单地从它看起来 params对象的名称(例如params.foo )
答案 2 :(得分:0)
当一个参数说是一个“结构”时,这意味着有许多参数来表示它的价值。在您的情况下,有:
只需取出它们并做任何你想做的事情:)
答案 3 :(得分:-2)
你仍然需要知道格式
def newObject = new SomeClassName()
newObject.foobar = Date.parse('yyyy-MM-dd', params.foobar)