une liste de cases à cocher
J'ai deux classes de domaine
class Contract {
String number
static hasMany = [statements:Statement]
}
class Statement {
String code
static hasMany = [contracts:Contract]
}
Je voudrais afficher tous les états disponibles dans mon gsp avec une case à cocher à côté de chaque, permettant à l'utilisateur de choisir lequel les instructions sont applicables au contrat. Donc quelque chose comme:
[ ] Statement Code 1
[ ] Statement Code 2
[ ] Statement Code 3
J'ai commencé avec ça:
<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>
Mais j'ai juste ne peut pas obtenir une liste de vérifié les états de l'automate (il y a null
éléments dans la liste, il y a des affirmations répétées...).
Une idée de comment réaliser cela?
OriginalL'auteur zoran119 | 2012-01-05
Vous devez vous connecter pour publier un commentaire.
C'est possible, mais elle nécessite un peu un hack. Tout d'abord, chaque case doit avoir le même nom, les "déclarations":
Deuxième, dans le contrôleur, vous devez supprimer le "_statements" bien avant de liaison:
La case à cocher de soutien n'a pas été conçu pour ce cas d'utilisation, d'où la nécessité d'un hack. Le multi-zone de liste à sélection est celui généralement utilisé pour ce type de scénario.
params.remove "_statements"
a fait le tour. je n'ai cependant écrire mon propre tag qui construit des cases à cocher sans cachées _ paramètre.Il est étrange que les cases à cocher tous besoin du même nom, mais qui a fonctionné pour moi!
OriginalL'auteur Peter Ledbrook
Personnellement, je préfère pour obtenir la liste des Id dans ce cas.
Objet De Commande:
En action de contrôleur:
OriginalL'auteur Wytze
Changer la case à quelque chose comme cela.
et puis dans le contrôleur, dans
params.statements
, vous obtiendrez une liste avec les Id de la vérifiés consolidés.Notez également la
?:''
dans la propriété checked, c'est une bonne idée de l'ajouter car n'importe quelle valeur(même faux) dans la propriété checked est interprété comme vérifiée.params.statements
ressemble à ceci:statements:[_3:, _4:, _5:, _6:, _1:, _2:, 6:true, 4:true, 3:true]
et il ne veut pas se lier àcontractInstance
. Tout ce que je veux vraiment, c'estparams.statements
être[3, 4, 6]
dans ce cas.OriginalL'auteur sikrip
Êtes-vous à la cartographie de la demande directement à
Contract
? Il est beaucoup plus sûr d'une carte de demandes entrantes dans unCommand object
.Que sur l'établissement d'une liste de valeurs sont mappés uniquement aux éléments existants. Je veux dire qu'il ne peut pas créer de nouveaux éléments de la liste. Vous devez la préparer avant de la cartographie. Si vous savez qu'il est toujours de 3 éléments, vous pouvez faire:
et carte demande à cet objet
OriginalL'auteur Igor Artamonov