#java #scala #validation #playframework #jodatime
#java #scala #проверка #playframework #jodatime
Вопрос:
Я добавляю проверку параметров даты в форме Scala; есть необязательные поля даты, которые позволяют пользователю выполнять поиск в определенном диапазоне дат / времени, но вторая дата должна быть после первой даты для допустимого диапазона.
На данный момент эта проверка работает:
val searchForm = Form(
mapping(
"ItemID" -> optional(text),
"fromDate" -> optional(jodaLocalDate("yyyy-MM-dd:HH:mm:ss")),
"toDate" -> optional(jodaLocalDate("yyyy-MM-dd:HH:mm:ss")),
"Class" -> optional(text),
"Status" -> optional(text),
"Group" -> optional(text),
"Area" -> nonEmptyText,
"Ordered" -> optional(text)
)(SearchModel.apply)(SearchModel.unapply)
verifying("Both or no dates must be selected. Date/Time range must be valid.", f => (f.fromDate.isEmpty amp;amp; f.toDate.isEmpty)||
((f.fromDate.isDefinedamp;amp;f.toDate.isDefined)amp;amp;f.fromDate.head.isBefore(f.toDate.head))))
Но он сравнивает только даты и игнорирует раздел времени HH:mm:ss
.
Есть ли способ добавить проверку времени? Должен ли я использовать другой метод проверки?
Комментарии:
1. Ваша html-форма также отправляет временную часть?
Ответ №1:
До тех пор, пока вы получаете раздел времени из формы, вызов даты .before()
, безусловно, будет проверять и часть времени.
Попробуйте:
def validateDates(fromDate: Option[Date], toDate: Option[Date]): Boolean = {
if(fromDate.isEmpty || toDate.isEmpty) false
else fromDate.get.before(toDate.get)
}
Затем:
verifying("Both or no dates must be selected. Date/Time range must be valid.", f => validateDates(f.fromDate, f.toDate))
Редактировать:
Просто понял, что это не пройдет, если оба поля даты пусты, поэтому небольшая модификация validateDates
исправит это:
def validateDates(fromDate: Option[Date], toDate: Option[Date]): Boolean = {
if(fromDate.isEmpty amp;amp; toDate.isEmpty) true
else if(fromDate.isEmpty || toDate.isEmpty) false
else fromDate.get.before(toDate.get)
}