Comment assurer un champ booléen à définir dans Grails?
-
26-09-2019 - |
Question
Je veux faire en sorte que l'un des deux champs de formulaire représentant une valeur booléenne est cochée. Mais il n'y a pas de contrainte appropriée pour ce faire. nullable: false
ne fonctionne pas.
class Organisation {
Boolean selfInspecting
static constraints = {
selfInspecting(nullable: false)
}
}
Comment puis-je vérifier si l'un des deux champs est cochée ou non?
La solution
Vous pouvez également vérifier dans le contrôleur, par exemple.
if (params.checkBox1 != 'on' && params.checkBox2 != 'on')
flash.error = 'At least one value must be checked.'
return ...
Autres conseils
Peut-être la plus simple approche consiste à utiliser une forme qui assure une valeur est prise. A ce titre, la création d'un des boutons radio plutôt que des cases à cocher est une meilleure solution. Il serait directement représenter votre intention aussi bien.
vous pouvez écrire votre propre validateur personnalisé.
quelque chose comme
selfInspecting(validator: {val, obj -> /*test selfInspecting here*/})
EDIT - en réponse à l'autre réponse -. Vous pouvez gérer sur le formulaire, mais vous devez également gérer sur le serveur
AUTRE EDIT - Il a été suggéré dans un commentaire que vous pouvez valider l'un des deux champs de votre classe de domaine. Ceci est facilement accompli avec un validateur personnalisé. Avec la signature ci-dessus pour la fermeture de validateur personnalisé, le val est la valeur selfInspecting et obj est l'instance d'objet de domaine. Donc, vous pourriez avoir
{ val, obj ->
if (val == null) return false // if you want to ensure selfInspecting is not null
else return true
... or ...
// if you want to check that at least 1 of two fields is not null
def oneOrTheOther = false
if (obj.field1 != null || obj.field2 != null)
oneOrTheOther = true
return oneOrTheOther
}