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?

Était-ce utile?

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

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top