Как передать значения Date как параметры в Grails - PullRequest
4 голосов
/ 19 мая 2011

Я видел несколько постов, связанных с использованием g: datePicker в Grails.Используя это, похоже, что вы можете просто выбрать значение из params, как, например, params.myDate.

Однако, когда я пытаюсь сделать что-то подобное на мой взгляд:

view:

<g:link controller="c" action="a" params="[fromDate:(new Date())]">

controller:

def dateval = params.fromDate as Date

Датанеправильно разбирается.Есть ли что-то еще, что я должен сделать для того, чтобы сделать дату «разборной» контроллером.Я осмотрелся и не нашел этого ни в одном сообщении, где datePicker не используется.

Ответы [ 3 ]

8 голосов
/ 20 мая 2011

Я предпочитаю отправлять время вместо даты от клиента.

<g:link controller="c" action="a" params="[fromDate:(new Date().time)]">

И в действии я использую конструктор Date, который требует времени.

def date = params.date

date = date instanceof Date ? date : new Date(date as Long)

Я создал метод в классе DateUtil для обработки этого. Это прекрасно работает для меня.

4 голосов
/ 19 мая 2011

Когда параметры отправляются в контроллер, они отправляются в виде строк.Следующее не будет работать

def dateval = params.fromDate as Date

Поскольку вы не указали, какой формат даты использовать для преобразования строки в дату.Замените вышеприведенное на:

def dateval = Date.parse('yyyy/MM/dd', params.fromDate)

Очевидно, что если ваша дата не отправлена ​​в формате yyyy/MM/dd, вам нужно изменить второй параметр.Кроме того, вы можете сделать это преобразование автоматически , зарегистрировав пользовательский редактор дат

2 голосов
/ 20 сентября 2013

Все, что отправлено из вида, является строкой, поэтому params.fromDate as Date не работает.

В Grails 2.x к объекту params добавлен метод даты, позволяющий легко и безопасно анализировать даты, например,

def dateval = params.date('fromDate', 'dd-MM-yyyy')

или вы также можете передать список форматов даты, например

def dateval = params.date('fromDate', ['yyyy-MM-dd', 'yyyyMMdd', 'yyMMdd'])

или формат можно прочитать из messages.properties с помощью ключа date.myDate.format и использовать метод даты params как

def dateval = params.date('fromDate')
...