1

私のgrailsドメインには、フィールドDate、つまりjava.util.Dateがあります。

私のコントローラーでは、SimpleDateFormateを使用してparamsからこの日付をロードしています。

正確には、params.dateが「20/02/201302:30am」のようなものであると想定します。コントローラでは、これを次のようにロードします。

SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "dd / MM / yyyy HH:mm a"); domainInstance.date = simpleDateFormat.parse(params.date)

このステートメントの実行中、エラーは検出されません。ただし、ドメインインスタンスが保存されているときに、次のエラーが生成されます。

[typeMismatch.Domain.date、typeMismatch.date、typeMismatch.java.util.Date、typeMismatch]; 引数[org.springframework.context.support.DefaultMessageSourceResolvable:コード

[タイプ'java.lang.String'のプロパティ値をプロパティ'date'の必須タイプ'java.util.Date'に変換できませんでした; ネストされた例外はjava.lang.IllegalArgumentExceptionです:日付を解析できませんでした:解析できない日付: "20/02/2013 02:30 am"]

どこがうまくいかないのか誰か教えてもらえますか?SimpleDateFormatがStringtoDateを解析すると確信しています。なぜ文字列として受け入れるのですか。

4

3 に答える 3

5

返信ありがとうございます。問題の解決策を見つけました。問題はこんな感じでした。

domainInstance = new Domain(params) として domainInstance をインスタンス化していました。これはコントローラー アクションの最初のステートメントでした。

このステートメントが実行されると、params は「dd/MM/yyyy HH:mm a」の形式で日付を保持します。したがって、このステートメントは domainInstance オブジェクトにエラーを追加します。

後で SimpleDateFormat を使用した後、変数は更新されますが、エラーが発生するため、エラーはオブジェクトに残ります。

このエラーの解決策は、ステートメント「domainInstance = new Domain(params)」の直後にステートメント domainInstance.clearErrors() を呼び出すことです。

これにより、オブジェクト内のすべてのエラーがクリアされます。後で domainInstance が保存されるときに、validate が呼び出されます。他のエラーが原因で検証が失敗した場合は、その時点でそれぞれのエラーが追加されます。

ラモハン

于 2013-02-14T07:38:44.460 に答える
1

Grails 2.3.1 は実際の問題です

def domain = new FooBar(params)
domain.clearErrors()
domain.save(flush:true) // <--- validation will be there
if (doamin.hasErrors()) {
 ... do something
}
于 2013-10-30T08:28:29.083 に答える
0

あなたが試すことができます:

domainInstance.date = new Date().parse("dd/MM/yyyy HH:mm a", params.date)
于 2013-02-13T06:20:37.810 に答える