Graal de l'itération en gsp vs accéder aux éléments de la Carte
Tout le contexte: je suis en train de traiter plusieurs fichiers à l'aide d'un graal de l'Application. Le code que j'affiche vient de la page de post-traitement où elle donne des informations sur les fichiers traités.
Mon sens initial était d'utiliser un code comme ceci:
<table>
<tr>
<th>Parsed from Excel:</th>
<th>Uploaded to DS:</th>
<th>File Name:</th>
<th>Size:</th>
</tr>
<tr>
<g:each in="${fileContents}" var="item">
<td>${item}</td>
</g:each>
<%--
<td>${fileContents.ExcelRows?.encodeAsHTML()}</td>
<td>${fileContents.policies?.encodeAsHTML()}</td>
<td>${fileContents.originalFileName?.encodeAsHTML()}</td>
<td>${fileContents.Size?.encodeAsHTML()}</td>
--%>
</tr>
</table>
Maintenant, ce que je ne comprends pas, c'est pourquoi le contenu est affiché dans la <g:each
boucle toujours les rapports key=value
comme ExcelRows=14
que j'ai reçu dans un seul cas.
Lorsque je passe de commentaires (note de l' <%--
tag utilisé), il fonctionne exactement comme prévu. À partir de mon "ExcelRows
" colonne, j'ai juste "14." Quel est le problème avec ma façon de penser que la <g:each
boucle doit faire la même chose? Intuitivement, cela revient à For each item in fileContents
.
display item
Mon code de contrôleur:
def processFile = {
def uploadedFile = request.getFile('excelFile')
//...ciselée
def fileContents = [
ExcelRows:"${ods.numberOfRows}",
policies:"${ods.numberOfPolicies}",
originalFileName: "${ods.originalFilename}",
Size:"${ods.size}"
]
[fileContents:fileContents]
}
Neves a Ajouté pertinentes du code de contrôleur
donc, votre objet fileContents est une Carte pas une liste! c'est pourquoi l'affichage de la clé=valeur
Comment dois-je effectuer une itération sur un carte dans le spg-land w/o intégration groovy/code Java?
comment au sujet de la deuxième proposition de Rob Hruska ?? <g:chacun dans="${fileContents.les valeurs de()}" var="item"> <td>${item?.encodeAsHTML()}</td> </g:chaque>
OriginalL'auteur avgvstvs | 2011-08-09
Vous devez vous connecter pour publier un commentaire.
Lors de l'itération sur une carte que vous allez travailler avec
s. Essayez d'utiliser:
Ou
${fileContents.values()}
est-il quelque chose que je suis absent?Êtes-vous sûr
fileContents
est en fait (pour quelque chose de non-nulle) dans la vue?Ouais, je peux accéder directement à des éléments à l'aide de
<td>${fileContents.ExcelRows?.encodeAsHTML()}</td>
Donc je sais que je suis là.Eh bien, c'est bizarre. Qu'advient-il si, dans mon premier exemple, vous remplacez
${fileContents}
avec${fileContents.entrySet()}
?Alors... on obtient un objet nul... ???!!!!
OriginalL'auteur Rob Hruska