C:forEach + ArrayList da sessão

Olá pessoal,

tenho o seguinte código:

[code] Enumeration atributos = session.getAttributeNames();
while(atributos.hasMoreElements()){
String autor = (String)atributos.nextElement();
ArrayList mensagens = (ArrayList)session.getAttribute(autor); %>

            Autor: ${autor} <br>
            <c:forEach items="${mensagens}" var="mensagem">
                Mensagem: ${mensagem.mensagem} - data: ${mensagem.data}
            </c:forEach>
            --------------------------------------
             <%for(int i = 0; i < mensagens.size(); i++){
                Mensagem mensagem = (Mensagem)mensagens.get(i); %>
              Mensagem: <%= mensagem.getMensagem()%> - data <%= mensagem.getData() %> <br>
         <%   } %> 

       <% }  %>

[/code]

A iteração com a tag c:forEach não me apresenta resultados e a de baixo (com scriptlets) está funcionando, ou seja, há uma lista de mensagens resgatada da sessão. O que há de errado com a tag c:forEach??

Obrigada.

coloca os codigos separados.

Ok.
O primeiro código, que não apresenta os resultados esperados (para autor, mensagem e data), mas tb não apresenta erro nenhum, seria este (tag c:foreach):

Enumeration atributos = session.getAttributeNames();   
while(atributos.hasMoreElements()){   
    String autor = (String)atributos.nextElement();   
    ArrayList mensagens = (ArrayList)session.getAttribute(autor); %>   
     
    Autor: ${autor} <br>   
    <c:forEach items="${mensagens}" var="mensagem">   
        Mensagem: ${mensagem.mensagem} - data: ${mensagem.data}   
    </c:forEach>   
<% }  %>

o outro, com scriptlet, que funciona, é este:

Enumeration atributos = session.getAttributeNames();   
while(atributos.hasMoreElements()){   
    String autor = (String)atributos.nextElement();   
    ArrayList mensagens = (ArrayList)session.getAttribute(autor); %>   
     
    <%for(int i = 0; i < mensagens.size(); i++){   
        Mensagem mensagem = (Mensagem)mensagens.get(i); %>   
      Mensagem: <%= mensagem.getMensagem()%> - data <%= mensagem.getData() %> <br>   
<%   } %>   
  
<% }  %>

Mas eu quero que a tag c:foreach funcione.

O problema é que o JSTL procura o objeto foco nos seguintes objetos de escopos e ordem: page, request, session, aplication.
O Objeto mensagens NÃO está sendo encontrado em lugar nenhum. Como você está misturando Script-lets com JSTL a sua variável mensagens deve estar no escopo da página (page) e não local. Assim, basta colocar a váriavel fora do loop.

Meu velho, não se mistura farinha com macarrão, moqueca com lasanha, nem scriptlet com jstl!!!

ou vc faz de um jeito, ou faz do outro (pelo amor de Deus escolha JSTL!!), senão vc vai ter dor de cabeça, como já esta tendo!!!