Grails min contrainte pour la validation de la date
-
28-09-2019 - |
Question
Je suis un débutant dans Grails et groovy. J'ai un projet de domaine classe avec date de début et de fin. Je veux mettre dans une contrainte précisant que la date de fin doit être supérieure à la date de début (puis encore un autre objet enfant des besoins du projet pour avoir son startdate et enddate validate avec les dates du projet parent). Est-ce possible avec la contrainte min ou dois-je le mettre ailleurs? contrainte unique ne permet deux propriétés à relier cette façon, dans l'espoir des contraintes min / max permettent cela. J'ai essayé
startDate(blank:false)
endDate(blank:false, min:'startDate')
Il renvoie une erreur indiquant que le startDate de propriété ne sont pas disponibles sur le projet
La solution
Essayez d'utiliser un validateur personnalisé:
static constraints = {
endDate(validator: { val, obj ->
val?.after(obj.startDate)
})
}
val
est la valeur du champ et obj
est une référence à l'objet en cours de validation. La fermeture peut contenir tout logique dont vous avez besoin, vous pouvez prolonger votre validation de la façon que vous décrivez dans votre question (en accédant à l'enfant des objets que vous faites référence à l'utilisation obj
).
Le validateur personnalisé est assez flexible. Jetez un oeil à la documentation . Idéalement, vous aurez envie de retourner un message personnalisé; comment faire peut également être trouvée dans les documents liés ci-dessus.