Ошибка проверки даты при привязке формы

#playframework #playframework-2.2

#playframework #playframework-2.2

Вопрос:

Я не пользовался Play с 1.x дней, и сейчас я работаю над новым приложением в версии 2.2, и я просто не могу получить поле даты для проверки. У меня есть 2 поля ввода даты для этой формы события, StartDate и EndDate, довольно простые. В модели я использую Joda.Дата-время, которое извлекается из базы данных и отображается в форме без проблем.

Моя проблема возникает при повторной отправке. Я уверен, что что-то не соответствует форматированию, но, черт возьми, я не могу понять, чего оно хочет. Вероятно, это связано с почти полным отсутствием знаний Scala, и я, вероятно, просто не понимаю, каковы правильные параметры.. Вот что у меня есть:

Event.java

 @Column(name = "event_end_date")
@Formats.DateTime(pattern="MM/dd/yyyy")
public DateTime eventEndDate;
  

EventController.java

 Form<Event> filledForm = eventForm.bindFromRequest();
  

events.scala.html

  @inputText(eventForm("eventDate"),  Symbol("data-date-format") -> "MM/dd/yyyy") 
 @inputDate(eventForm("eventEndDate"),Symbol("data-date-format") -> "MM/dd/yyyy") 
  

В приведенном выше примере я пытаюсь использовать как inputText, так и inputDate, я бы хотел использовать @inputDate, но я возьму все, что работает на данный момент! При редактировании существующих данных @inputText отображает дату в формате «2014-06-06T04:00:00.000-04:00», поэтому я знаю, что то, что я добавляю к вызову в первой строке, неверно, но не могу понять, какие параметры в scala.

Я полагаю, что тег @inputDate не знает, что делать с существующим значением, поэтому он его не отображает. В любом случае, когда я отправляю новые значения в поля в формате «ММ / дд / гггг», они не проверяются.

Я думаю, здесь есть 2 вопроса.

  1. Как мне установить значение даты, чтобы оно отображалось при разных форматах?
  2. Как мне преобразовать входные данные при отправке формы, чтобы они проверялись как DateTime?

Я просмотрел примеры форм и отметил, что, похоже, там мало что говорится о датах и формах. Удивительно, но поиск в Google привел к ряду очень расплывчатых предложений, которые никуда не привели.

Ответ №1:

Я не нашел решения, которое искал, но после небольшого поиска у меня появилась идея создать FormBean для перевода модели. Это позволило мне преобразовать входящие значения при переводе EventForm обратно в Event Model и выполнить мои преобразования даты там. Не идеальное решение для этой формы, которая довольно проста. Я думаю, что это хорошая практика, хотя для форм, которые представляют несколько моделей и / или управляют более сложными состояниями и метаданными, не связанными с моделью.

Ссылка на идею здесь: введите описание ссылки здесь

Кроме того, это решило проблему с помощником @InputDate и форматированием даты, где средство получения для EVENTFORM теперь преобразует дату в требуемый формат html5 «гггг-мм-дд». После перехода к этому формату браузер (chrome) знает, что с ним делать, и все отображается нормально. Я все еще не знаю, как лучше выполнить преобразование без компонента поддержки формы, но сейчас я читаю о Scala, и у меня есть ощущение, что я разберусь с этим, имея за плечами немного больше Scala. Я уже убежден, что базовый tut на Scala принесет пользу разработчикам Java при попытке закодировать шаблоны scala.

Надеюсь, это поможет следующему новичку в scala!

Ответ №2:

Почему бы вам не использовать дату в качестве входного текста и не проверить дату методом form validate, вот пример использования такого метода. Если проверка прошла успешно, вы можете без проблем преобразовать ее в дату в контроллере.