69 Stimmen

jstl foreach ein Element im letzten Datensatz auslassen

Versuchen, diese Jstl zu verwenden, um eine Json-Zeichenfolge zu formulieren, wie kann ich das Segment nicht ein Komma am Ende des letzten Datensatzes zu setzen? beachten Sie das Komma am Ende

<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>

0 Stimmen

Alle Elemente brauchen das }, aber das letzte darf kein Komma haben,

173voto

BalusC Punkte 1034465

Verwenden Sie einfach [LoopTagStatus#isLast()](http://java.sun.com/javaee/5/docs/api/javax/servlet/jsp/jstl/core/LoopTagStatus.html#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>

Sie können auch den Bedingungsoperator in EL anstelle von <c:if> :

    ${!loop.last ? ',' : ''}

3voto

Eine Sache, die ich an JSTL nie mochte (ich glaube, das ist die einzige Sache :)) ist die Tatsache, dass es keine Möglichkeit gibt, die Größe einer Liste/Sammlung abzurufen.

EDIT: Ok, es war also möglich, aber ich wusste es nicht :( siehe hier .

Le site forEach Tag hat die varStatus Attribut, mit dem Sie den Index der Zeile bestimmen können ( index / count Eigenschaften auf der varStatus Variable), aber Sie müssen prüfen, ob Sie sich an der letzten Position in der Liste befinden, d.h. Sie müssen die Listengröße vorher kennen:

<c:forEach items="${fileList}" var="current" varStatus="status">
   ...
  <c:if test="${not (status.count eq listSize)}">,</c:if>
</c:forEach>

Allerdings müssen Sie die listSize in den Geltungsbereich, manuell, bevor Sie diese Art von Dingen tun.

In einem meiner Projekte habe ich selbst ein Tag erstellt, das eine Sammlung aufnimmt und den Wert zurückgibt:

  <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>

Sie könnten das Gleiche tun, wenn Sie diese Art von Code häufig haben (ansonsten können Sie ihn einfach in den Geltungsbereich einfügen, was immer für Sie bequem ist).

3voto

nokheat Punkte 1157

Von Überprüfung der Größe einer Sammlung mit JSTL die Antwort war, das Funktions-Tag zu verwenden

dies am Anfang der Seite einfügen, um den fn-Namensraum zu ermöglichen

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

und verwenden Sie diese in Ihrer jsp-Seite

<p>The length of the companies collection is : ${fn:length(companies)}</p>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X