Чтение значения g: datePicker в Grails без использования метода «new Object (params)» - PullRequest
3 голосов
/ 11 февраля 2009

Допустим, у меня есть средство выбора даты, называемое "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 .

Ответы [ 4 ]

4 голосов
/ 11 февраля 2009

Используйте объект команды идиома. В случае вашего примера я предполагаю, что ваша форма вызывает действие handleDate. Внутри контроллера:


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

Вот FoobarDateCommand. Обратите внимание, как вы называете поле так же, как в представлении:


class FoobarDateCommand { 
    Date foobar 
}

Командные объекты - удобный способ инкапсулировать все задачи проверки для каждой из ваших форм, сохраняя ваши контроллеры красивыми и маленькими.

2 голосов
/ 27 декабря 2009

Чтение значения g: datePicker стало намного проще в Grails 1.2 (см. замечания к выпуску ):

Лучший анализ даты

Если вы отправите дату из тег, получение объекта Date теперь выполняется как просто, как искать его с объект params по имени (например, params.foo ) * +1010 *

0 голосов
/ 11 февраля 2009

Когда параметр говорит, что он является «структурой», это означает, что есть ряд параметров, представляющих его значение. В вашем случае есть:

  • params ["foobar_year" год хранения
  • params ["foobar_month"] месяц хранения
  • params ["foobar_day"] день хранения

Просто извлеките их и делайте что хотите:)

0 голосов
/ 11 февраля 2009

Вам все еще нужно знать формат

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