2015-11-09 3 views
1

Один из моих сотрудников написал заявку в Grails 2.4.4 (я знаю, это датировано). Одна из проблем, которые имеет приложение, заключается в том, что вы можете ввести дату, как 2/31/2015, и она будет принята как действительная и будет отображаться в вашем доменном объекте вместо 3/3/2015.Предотвращение Grails 2.4.4 от принятия недопустимых дат

Есть ли какой-либо простой способ предотвратить это, используя гравий? Или мы вместо этого должны полагаться на проверку на стороне клиента для этого конкретного свойства?

Спасибо.

ответ

2

Предполагая, что Grails использует DateFormat разобрать дату String, проблема в том, что он использует lenientCalendar. Например, с мягким набором к истинному (по умолчанию), то результат, как вы описали:

import java.text.SimpleDateFormat 

def sdf = new SimpleDateFormat('MM/dd/y') 
assert sdf.parse('02/31/2015').toString() == 'Tue Mar 03 00:00:00 EST 2015' 

Но, если вы измените его на ложь, вы получите исключение для тех же дат:

sdf.lenient = false 

try { 
    sdf.parse('02/31/2015').toString() == 'Tue Mar 03 00:00:00 EST 2015' 
} catch (java.text.ParseException ex) { 
    // java.text.ParseException: Unparseable date: "02/31/2015" 
    println 'Oops' 
} 

Так справиться с этой проверки в контроллере, вы можете

  1. Создать command object.
  2. Имейте объект команды принять дату как String, а не Date и выполнить проверку даты.
  3. Измените действие контроллера для использования командного объекта вместо параметров. Это может потребовать изменения кода GSP.
Смежные вопросы