essayant d'utiliser ce jstl pour formuler une chaîne json, comment puis-je faire le segment pour ne pas mettre de virgule à la fin du dernier enregistrement? noter la virgule à la fin
<c:forEach items="${fileList}" var="current">
{ id:1001,data:["<c:out value="${current.fileName}" />" , "<c:out value="${current.path}" />" , "<c:out value="${current.size}" />" , "<c:out value="${current.type}" />"] },
</c:forEach>
Utilisez simplement LoopTagStatus#isLast()
.
<c:forEach items="${fileList}" var="current" varStatus="loop">
{ id: 1001,
data: [
"<c:out value="${current.fileName}" />",
"<c:out value="${current.path}" />",
"<c:out value="${current.size}" />",
"<c:out value="${current.type}" />"
]
}<c:if test="${!loop.last}">,</c:if>
</c:forEach>
Vous pouvez également utiliser l'opérateur conditionnel dans EL au lieu de <c:if>
:
${!loop.last ? ',' : ''}
Une chose que je n'ai jamais aimé à propos de JSTL (en fait, je pense que c'est la seule chose :)) est le fait qu'il n'y a aucun moyen de récupérer la taille d'une liste/collection.
EDIT: ok, donc c'était possible mais je ne le savais pas :( voir ici .
La balise forEach
possède l'attribut varStatus
que vous pouvez utiliser pour déterminer l'index de la ligne (propriétés index
/count
sur les varStatus
variable) mais vous devez tester si vous êtes à la dernière position de la liste, cela signifie avoir au préalable la taille de la liste:
<c:forEach items="${fileList}" var="current" varStatus="status">
...
<c:if test="${not (status.count eq listSize)}">,</c:if>
</c:forEach>
Mais vous devrez placer le listSize
dans la portée, manuellement, avant de faire ce genre de chose.
Ce que j'ai fait dans l'un de mes projets, c'est de créer moi-même un tag qui prend une collection et renvoie la valeur:
<myLib:collectionSize collection="${fileList}" var="listSize" />
<c:forEach items="${fileList}" var="current" varStatus="status">
...
<c:if test="${not (status.count eq listSize)}">,</c:if>
</c:forEach>
Vous pouvez faire de même si vous avez souvent ce type de code (sinon vous pouvez simplement l'ajouter dans la portée avec ce qui vous convient).
par Vérifier une taille de collection avec JSTL la réponse était d'utiliser la balise de fonctions
mettre cela en haut de la page pour autoriser l'espace de noms fn
<%@ taglib prefix="fn" uri="http://Java.Sun.com/jsp/jstl/functions" %>
et utiliser comme ça dans votre page jsp
<p>The length of the companies collection is : ${fn:length(companies)}</p>