Считывание значения g:DatePicker в Grails без использования метода “новый объект (параметры)”

StackOverflow https://stackoverflow.com/questions/534330

  •  22-08-2019
  •  | 
  •  

Вопрос

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

Обновленный: Дополнительную информацию можно найти в Граали ДЖИРЫ.

Это было полезно?

Решение 2

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

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

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

Другие советы

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


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

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


class FoobarDateCommand { 
    Date foobar 
}

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

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

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

Просто достань их и делай все, что захочешь :)

Однако вам все равно нужно знать формат

def newObject = new SomeClassName()
newObject.foobar = Date.parse('yyyy-MM-dd', params.foobar)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top