不使用“new Object(params)”方法读取 Grails 中的 g:datePicker 值
-
22-08-2019 - |
题
假设我有一个名为“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)
不隶属于 StackOverflow