私の同僚の 1 人が Grails 2.4.4 でアプリケーションを作成しました (それは古いものです)。アプリの問題点の 1 つは、2015 年 2 月 31 日のような日付を入力すると、有効なものとして受け入れられ、代わりに 2015 年 3 月 3 日としてドメイン オブジェクトに表示されることです。
grails を使用してこれを防ぐ簡単な方法はありますか? それとも、この特定のプロパティに対してクライアント側の検証に頼る必要がありますか?
ありがとう。
私の同僚の 1 人が Grails 2.4.4 でアプリケーションを作成しました (それは古いものです)。アプリの問題点の 1 つは、2015 年 2 月 31 日のような日付を入力すると、有効なものとして受け入れられ、代わりに 2015 年 3 月 3 日としてドメイン オブジェクトに表示されることです。
grails を使用してこれを防ぐ簡単な方法はありますか? それとも、この特定のプロパティに対してクライアント側の検証に頼る必要がありますか?
ありがとう。
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'
}
したがって、コントローラーでこの検証を処理するには、次のことができます。
String
ではなくとして受け入れDate
させ、日付の検証を実行します。