Estou agarrado nesse desafio, ele funciona com o ForEach que eu comentei:
<jsp:useBean id="dao" class="br.com.caelum.agenda.dao.ContatoDao" />
<table border="1">
<c:forEach var="contato" items="${dao.lista}" varStatus="id">
<tr bgcolor="#${id.count % 2 == 0 ? 'aaee88':'ffffff' }">
<th>Nome:</th>
<td>${contato.nome}</td>
<th>Email:</th>
<td>
<c:choose>
<c:when test="${not empty contato.email}">
<a href="mailto:${contato.email }">${contato.email}</a>
</c:when>
<c:otherwise>
E-mail não informado
</c:otherwise>
</c:choose>
</td>
<th>Endereço:</th>
<td>${contato.endereco}</td>
<th>Data de Nascimento:</th>
<td><fmt:formatDate value="${contato.dataNascimento.time}"
pattern="dd/MM/yyyy" /></td>
</tr>
</c:forEach>
</table>
no arquivo lista-contatos.jsp
mas usando Display Tag ele não funciona.
<jsp:useBean id="dao" class="br.com.caelum.agenda.dao.ContatoDao" />
<%
request.setAttribute("tabela", dao.getLista());
%>
<display:table name="tabela">
<display:column title="nome" property="nome" />
<display:column title="email" property="email" />
<display:column title ="endereco" property="endereco" />
</display:table>