使用表单绑定进行日期验证失败

时间:2014-07-06 20:02:01

标签: playframework playframework-2.2

自从1.x天以来,我还没有使用过Play,而我现在正在开发2.2中的新应用,而我根本无法获得Date字段来验证。我有这个事件表单的两个日期输入字段,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();

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会在&#34; 2014-06-06T04:00:00.000-04:00&#34;中显示日期。格式,所以我知道我在第一行添加到调用中的内容是错误的,但无法弄清楚scala中的参数是什么。

在@inputDate标签上它不知道如何处理现有值,我相信它并没有显示它。当我在&#34; MM / dd / yyy&#34;中的字段中提交新值时,无论哪种方式;格式他们没有验证。

我想这里有2个问题。

  1. 如何设置日期值,以便在格式不同时显示?
  2. 如何在提交表单时转换输入,以便将其验证为DateTime?
  3. 我查看了表单示例,并注意到处理日期和表单似乎很少。令人惊讶的是谷歌搜索引发了许多非常含糊的建议,这些建议无处可寻。

2 个答案:

答案 0 :(得分:0)

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

这里提到了这个想法:enter link description here

此外,这解决了@InputDate帮助器和日期格式化的问题,其中theEventForm的getter现在将日期转换为html5所需格式“yyy-mm-dd”。一旦采用该格式,浏览器(chrome)就知道如何处理它,一切都很好。我仍然不知道如何最好地使用Form支持bean进行转换,但我现在正在阅读Scala,我有一种感觉,我会想到更多Scala在我的腰带下。我已经确信在尝试编写scala模板时,Scala的基本内容将使Java开发人员受益。

希望这有助于下一个scala新手!

答案 1 :(得分:0)

为什么不将日期作为输入文本并在表单验证方法中验证日期,这里使用example这样的方法。 如果验证通过,那么您可以将其转换为控制器中没有问题的日期。