在不使用“new Object(params)”方法的情况下读取Grails中的g:datePicker-value

时间:2009-02-10 21:38:45

标签: grails datepicker gsp taglib

假设我有一个名为“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 个答案:

答案 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)

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

  • params [“foobar_year”存储年
  • params [“foobar_month”]存储月
  • params [“foobar_day”]存储日

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

答案 3 :(得分:-2)

你仍然需要知道格式

def newObject = new SomeClassName()
newObject.foobar = Date.parse('yyyy-MM-dd', params.foobar)