場所を作るためのフォームがあります。国によっては、州(州、地域)フィールドが必須かどうかが決まります。
必須でない場合は、空の文字列ではなく、nullにします。すべての空のフォームフィールドをnullにするコードがあります:
def newparams = [:]
place = new Place()
params.each() { k, v ->
if (v instanceof String && place.hasProperty(k)) {
if (!v.trim().length()) {
newparams[k] = null
} else {
newparams[k] = v
}
}
}
place = new Place(newparams)
place.validate()
現在、プレイスドメインには、州のバリデーターがあります。
province validator: {val, obj -> if (obj.country in obj.requiresRegionCountries() && !obj.province) return [province.required]}
このルールでは、必要かどうかにかかわらず、常に「州をnullにすることはできません」と表示されます。
これは、デフォルトでfalseに設定されているnull許容バリデーターが原因だと思います。
nullable:trueを追加している場合、Provinceが必要な場合でも、カスタムバリデーターはスキップされ、空のProvinceで保存できます(nullでインスタンス化されるためだと思います)
今、私はどういうわけか私のカスタムバリデーターと私のバリデーターでnullableを指定する機能が必要です、次のようなものです:
province validator: {val, obj ->
if (obj.country in obj.requiresRegionCountries() && !obj.province) {
nullable: false
return [province.required] }
else {
nullable: true
}
}
Grails 2.0.3でこれをどのように達成できますか?