Playframework 表单绑定的日期验证失败

Playframework 表单绑定的日期验证失败,playframework,playframework-2.2,Playframework,Playframework 2.2,从1.x版开始我就没有使用过Play,现在我正在开发2.2版中的一个新应用程序,我根本无法获得要验证的日期字段。这个事件表单有两个日期输入字段,startDate和endDate,非常简单。在这个模型中,我使用的是Joda.DateTime,它从数据库中提取数据并以表单的形式显示,没有问题 当我再次提交时,我的问题来了。我确信有些东西与格式不符,但由于我的谎言,我不知道它想要什么。这可能是因为几乎没有Scala知识,我可能只是不知道正确的参数是什么。。以下是我所拥有的: Event.java @

从1.x版开始我就没有使用过Play,现在我正在开发2.2版中的一个新应用程序,我根本无法获得要验证的日期字段。这个事件表单有两个日期输入字段,startDate和endDate,非常简单。在这个模型中,我使用的是Joda.DateTime,它从数据库中提取数据并以表单的形式显示,没有问题

当我再次提交时,我的问题来了。我确信有些东西与格式不符,但由于我的谎言,我不知道它想要什么。这可能是因为几乎没有Scala知识,我可能只是不知道正确的参数是什么。。以下是我所拥有的:

Event.java

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

Form<Event> filledForm = eventForm.bindFromRequest();
在上面我尝试了inputText和inputDate,我想使用@inputDate,但我会接受任何在这一点上有效的东西!编辑现有数据时,@inputText以2014-06-06T04:00:00.000-04:00格式显示日期,因此我知道我在第一行中添加到调用的内容是错误的,但无法确定scala中的参数是什么

在@inputDate标记上,它不知道如何处理现有值,我相信它不会显示它。无论哪种方式,当我以MM/dd/yyy格式在字段中提交新值时,它们都不会验证

我想这里有两个问题

如何设置日期值,使其在格式不同时显示? 提交表单时,如何转换输入,使其作为日期时间进行验证?
我查看了表单示例,并注意到似乎很少涉及日期和表单。令人惊讶的是,谷歌搜索结果中出现了一些非常模糊的建议,但这些建议在任何地方都没有得到

我没有想出我正在寻找的解决方案,但经过一番探索后,我产生了一个想法,构建一个FormBean来翻译模型。这允许我在将EventForm转换回事件模型时转换传入值,并在那里进行日期转换。这不是这种形式的理想解决方案,它非常简单。我认为对于表示多个模型和/或管理与模型无关的更复杂状态和元数据的表单来说,这是一个很好的实践

这里提到了这个想法:

此外,这还解决了@InputDate助手和日期格式的问题,即由EventForm的getter现在将日期转换为html5所需的yyy-mm-dd格式。一旦转换为该格式,浏览器chrome就知道如何处理它,并且一切都显示良好。我仍然不知道在没有表单支持bean的情况下如何最好地进行转换,但是我现在正在阅读Scala,我有一种感觉,我会在我的腰带下再加一点Scala来解决这个问题。我已经确信,当Java开发人员试图编写Scala模板时,对Scala进行一次基本的tut将使他们受益匪浅


希望这对下一个scala新手有所帮助

为什么不将日期作为输入文本,并以validate方法的形式验证日期,下面是此类方法用法的示例。 如果验证通过,那么您可以将其转换为日期,而不会在控制器中出现问题

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