9
votes

une liste de cases à cocher

J'ai deux classes de domaine

<g:each in="${Statement.list()}" var="statement" status="i">
    <g:checkBox name="statements[${i}].id" value="${statement.id}" checked="${contractInstance.statements.contains(statement.id)}" />
    <label for="statements[${i}]">${statement.code}</label>
</g:each>


0 commentaires

4 Réponses :


0
votes

Êtes-vous en mappage directement à contrat ? Il est beaucoup plus sûr de la cartographie de la carte entrante dans un objet de commande .

Comme pour la mapper une liste - les valeurs sont mappées uniquement sur des éléments existants. Je veux dire que cela ne peut pas créer de nouveaux éléments de la liste. Vous devez la préparer avant la cartographie. Si vous savez qu'il y a toujours 3 éléments, vous pouvez faire: xxx

et la demande de carte à cet objet


0 commentaires

1
votes

Changez la case à cocher à quelque chose comme ça. XXX

, puis dans le contrôleur, dans Params.Statifs Vous obtiendrez une liste avec les identifiants de la vérité déclarations.

remarquez également le ?: '' dans la propriété cochée, c'est une bonne idée de l'ajouter car une valeur (même "Faux") est interprétée dans la propriété enregistrée. comme vérifié.


1 commentaires

Utilisation de cette approche (et vérifiant les instructions 3, 4 et 6), Params.Statifs ressemble à ceci: Déclarations: [_ 3 :, _4 :, _6 :,1 :,1 :,1: :, 6: True, 4: True, true, true] et il ne lie pas à contractnstance . Tout ce que je veux vraiment, c'est param .statifs pour être [3, 4, 6] dans ce cas.



6
votes

Ceci est possible, mais cela nécessite un peu de hack. Tout d'abord, chaque case doit avoir le même nom, "Déclarations": xxx pré> p> second, dans le contrôleur, vous devez supprimer la propriété "_statifs" avant la liaison: p>

def contract = Contract.get(params.id)
params.remove "_statements"
bindData contract, params
contract.save(failOnError: true)


2 commentaires

parames.remove "_statifs" a fait le tour. J'ai toutefois écrit ma propre balise qui crée des cases à cocher sans le paramètre caché _.


Il est étrange que les cases à cocher utilisaient tous le même nom, mais cela a fonctionné pour moi!



2
votes

Je préfère personnellement obtenir la liste des identifiants dans ce cas.

BookCommand bc ->
    author.books = Book.getAll(bc.bookIds)


0 commentaires