【问题标题】:Reading the g:datePicker-value in Grails without using the "new Object(params)"-method在 Grails 中读取 g:datePicker 值而不使用“new Object(params)”方法
【发布时间】:2009-02-10 21:38:45
【问题描述】:

假设我有一个名为“foobar”的日期选择器:

<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

【问题讨论】:

  • SomeClassName 上的字段 foobar 是 Date 类型吗?使用 def 可能不会强制强制,而声明的类型可能会强制绑定强制类型。以前没遇到过,更想知道....

标签: grails datepicker gsp taglib


【解决方案1】:

使用command object 成语。在您的示例中,我假设您的表单调用操作handleDate。控制器内部:


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

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


class FoobarDateCommand { 
    Date foobar 
}

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

【讨论】:

    【解决方案2】:

    在 Grails 1.2 中读取 g:datePicker 值变得更加容易(参见 release notes):

    更好的日期解析

    如果您提交的日期来自 标签, 获取 Date 对象现在为 很简单,就像从 params 对象的名称(例如 params.foo )

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        你仍然需要知道格式

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

        【讨论】:

        • params.foobar 的值是字符串“struct”,所以很遗憾你的解决方案不起作用。
        • Ups - 认为 g:datePicker 将其作为一个字符串发送。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-19
        • 1970-01-01
        • 2013-05-10
        • 2016-03-06
        • 2014-07-26
        相关资源
        最近更新 更多