1

私の同僚の 1 人が Grails 2.4.4 でアプリケーションを作成しました (それは古いものです)。アプリの問題点の 1 つは、2015 年 2 月 31 日のような日付を入力すると、有効なものとして受け入れられ、代わりに 2015 年 3 月 3 日としてドメイン オブジェクトに表示されることです。

grails を使用してこれを防ぐ簡単な方法はありますか? それとも、この特定のプロパティに対してクライアント側の検証に頼る必要がありますか?

ありがとう。

4

1 に答える 1

2

Grails がDateFormatを使用して date を解析していると仮定するとString、問題はそれがlenient Calendarを使用していることです。たとえば、 lenient を true (デフォルト) に設定すると、結果は次のようになります。

import java.text.SimpleDateFormat

def sdf = new SimpleDateFormat('MM/dd/y')
assert sdf.parse('02/31/2015').toString() == 'Tue Mar 03 00:00:00 EST 2015'

ただし、これを false に変更すると、同じ日付で例外が発生します。

sdf.lenient = false

try {
    sdf.parse('02/31/2015').toString() == 'Tue Mar 03 00:00:00 EST 2015'
} catch (java.text.ParseException ex) {
    // java.text.ParseException: Unparseable date: "02/31/2015"
    println 'Oops'
}

したがって、コントローラーでこの検証を処理するには、次のことができます。

  1. コマンド オブジェクトを作成します。
  2. コマンド オブジェクトに日付をStringではなくとして受け入れDateさせ、日付の検証を実行します。
  3. パラメータの代わりにコマンド オブジェクトを使用するようにコントローラ アクションを変更します。これには、GSP コードの変更も必要になる場合があります。
于 2015-11-09T19:25:41.000 に答える