1

play-framework 1.2.5 を使用しています。

一部の製品を編集する必要がある html フォーム (グルーヴィーなテンプレート) があります。この製品にあるフィールドの 1 つは、「updateDate」 - joda-time 日付タイプです。

フォームを送信すると、現在の update-date フィールド (=現在の送信時刻) を含む出力が得られると予想されますが、代わりに古い値 (前の日付) が表示されます。私は何を間違っていますか?

以下は、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 に答える