2008-12-20 3 views
0

J'ai une page JSP qui reçoit une ArrayList d'objets événement, chaque objet événement contient une ArrayList de dates. Je suis à travers les objets itérer d'événements avec les éléments suivants:JSTL Impression des éléments arrayList

Comment puis-je itérer à travers le ArrayList DateTimes de chaque objet événement et imprimer chaque date/fois les événements?

+0

Vous semblez avoir omis le code de votre question. – cletus

Répondre

3

Si je comprends votre question, vous avez essentiellement une ArrayList de ArrayLists. JSTL a quelques règles assez étranges pour ce qu'est une "collection" "d'objets" valide. Cela n'a pas été suffisamment répondu par le JSTL 1.2 specification donc je suis allé au code source.

forEach peut itérer:

  • Un tableau de types natifs ou Object (Note: cela inclut tous les tableaux génériques en raison de l'effacement de type);
  • Collection ou toute sous-classe;
  • Tout Iterator;
  • An Enumeration;
  • Tout ce qui met en œuvre Map; ou
  • Valeurs comma-séparées en tant que String. C'est un comportement obsolète.

Mise en garde: utilisation des itérateurs et dénombrements dans ce contexte est potentiellement problématique car cela modifie leur état et il n'y a aucun moyen de les réinitialiser (via JSTL).

Quoi qu'il en soit, le code est simple:

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> 
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %> 
<c:forEach var="event" items="${events}"> 
    <c:forEach var="date" items="${event}"> 
    <fmt:formatDate value="${date}" type="both" 
     timeStyle="long" dateStyle="long" /> 
    </c:forEach> 
</c:forEach> 

Si l'on suppose l'objet événement est simplement une collection de dates. Si cette collection est une propriété, il suffit de remplacer ${event} par ${event.dates} ou autre.

+0

au moins pour jsp 2.0, il ne suffit pas d'implémenter itérable – krosenvold

+0

Vous avez raison. Edité, corrigé et clarifié. – cletus

2
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> 
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %> 
<c:forEach items="${events}" var="event"> 
    <c:forEach items="${event.dates}" var="date"> 
      <fmt:formatDate value="${date}" type="both" 
      timeStyle="long" dateStyle="long" /> 
     </c:forEach> 
</c:forEach>