1

我使用播放框架 1.2.5。

我有一个 html-form(groovy 模板)应该编辑一些产品。我在此产品中拥有的字段之一是:“updateDate”- joda-time 日期类型。

当我提交表单时,我希望得到带有当前更新日期字段(=当前提交时间)的输出,但我有旧值 - 上一个日期。我做错了什么?

这是 form.html 模板片段:

#{form @Products.save()}

  <input type="hidden" name="product.id" value="${product?.id}">

  %{
     org.joda.time.DateTime nowTime = org.joda.time.DateTime.now();
  }%

  <input type="hidden" name="product.updateDate" value="${nowTime}">    
   ...    

  <input type="submit" value="Save this product" id="saveProduct">
#{/form}

注意:

"${nowTime}" 的值在模板中是正确的(我已经检查过了),错误的值被传递给控制器​​的 save() 方法。

4

2 回答 2

1

Play 1.2.x 支持自动绑定到 Date 对象,它支持许多不同的日期格式。检查,http://www.playframework.org/documentation/1.2.5/controllers#binding

我不知道 DateTime 支持,但您始终可以将其作为 Date 实例接受,并在需要时从中创建 DateTime,或者您可以实现 TypeBinder 接口来创建自己的自定义映射。见http://www.playframework.org/documentation/1.2.5/controllers#custombinding

于 2013-01-28T17:01:56.870 回答
0

这是可怕的代码。您可以让用户伪造更新日期,只需传递他们喜欢的任何值。

但是我从您的评论中看到您找到了一种在控制器代码中很好地做到这一点的方法。我经常在模型代码中通过扩展 save 方法来做到这一点,因此它设置更新时间然后调用 super.save()

于 2013-01-30T04:47:06.243 回答