Problema Struts conexão mysql (básico)

coloca isso numa tablea ou usa displaytag fica bem mais simples…:wink:

Realmente compensa usar a displaytag…mas esse tópico deve ajudar:

http://www.guj.com.br/posts/list/109221.java

tenho uma jsp chamada lista.jsp onde só peço pra me mostrar uma lista de contatos:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
	<!-- for -->
	<c:forEach var="contato" items="${contatos}">
		${contato.id} - ${contato.nome} <br/>
	</c:forEach>
</html>

minha classe ListaContatosAction:

package br.com.treinamento.struts.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import br.com.treinamento.dao.ContatoDAO;
import br.com.treinamento.jdbc.modelo.Contato;

public class ListaContatosAction extends Action {
	public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{
		//pesquisa completa no BD
		List<Contato> listaContato = new ContatoDAO().getLista();
		request.setAttribute("contatos", listaContato);
		
		return map.findForward("listaContato");
	}
}

tenho minha classe dao ContatoDAO

package br.com.treinamento.dao;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

import br.com.treinamento.jdbc.ConnectionFactory;
import br.com.treinamento.jdbc.modelo.Contato;

public class ContatoDAO {
	/**
	 * Variável do tipo Connection que possibilita a conexão ao banco de dados
	 */
	private Connection conn;

	public ContatoDAO() throws SQLException {
		this.conn = ConnectionFactory.getConnection();
	}

	/**
	 * Método que adiciona valores à tabela
	 * 
	 * @param contato
	 * @throws SQLException
	 */
	public void adiciona(Contato contato) throws SQLException {

		PreparedStatement stmt = conn
				.prepareStatement("INSERT INTO CONTATOS(NOME,EMAIL,ENDERECO) VALUES (?,?,?)");
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getEmail());
		stmt.setString(3, contato.getEndereco());
		stmt.execute();
		stmt.close();
		conn.close();
	}

	/**
	 * Método que consulta por id o elemento inserido
	 * 
	 * @return contatos
	 * @throws Exception
	 */
	public Contato consulta() throws SQLException {
		PreparedStatement pstm = conn
				.prepareStatement("SELECT * FROM CONTATOS WHERE ID=1");
		ResultSet rs = pstm.executeQuery();

		Contato contato = new Contato();

		if (rs.next()) {
			contato.setNome(rs.getString("nome"));
			contato.setEndereco(rs.getString("endereco"));
			contato.setEmail(rs.getString("email"));
			rs.close();
			pstm.close();
			conn.close();
		}
		return contato;
	}

	/**
	 * Método que lista todos os elementos inseridos
	 * 
	 * @return contatos
	 * @throws Exception
	 */
	public List<Contato> getLista() throws SQLException {
		PreparedStatement pstm = this.conn
				.prepareStatement("SELECT * FROM CONTATOS");
		ResultSet rs = pstm.executeQuery();

		List<Contato> contatos = new ArrayList<Contato>();

		while (rs.next()) {
			Contato contato = new Contato();
			contato.setNome(rs.getString("nome"));
			contato.setEndereco(rs.getString("endereco"));
			contato.setEmail(rs.getString("email"));
			contatos.add(contato);
		}

		rs.close();
		pstm.close();
		// conn.close();

		return contatos;
	}

	/**
	 * Método que altera os dados de um contato específico
	 * 
	 * @param contato
	 * @throws SQLException
	 */
	public void altera(Contato contato) throws SQLException {
		PreparedStatement stmt = conn
				.prepareStatement("update contatos set nome=?, email=?, endereco=?, where id=?");
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getEmail());
		stmt.setString(3, contato.getEndereco());
		stmt.setLong(4, contato.getId());
		stmt.execute();
		stmt.close();
	}

	/**
	 * Método que deleta os dados de um contato específico
	 * 
	 * @param contato
	 * @throws SQLException
	 */
	public void deleta(Contato contato) throws SQLException {
		PreparedStatement stmt = conn
				.prepareStatement("delete from contatos where id=?");
		stmt.setLong(1, contato.getId());
		stmt.execute();
		stmt.close();
	}
}

no struts config está configurado:

   <action-mappings>
	<action path="/listaContatos" type="br.com.treinamento.struts.action.ListaContatosAction">
                           <forward name="listaContato" path="/lista.jsp" />
      	</action>
   </action-mappings>

porque no browser ao invéz de aparecer a lista de meus contatos aparece:
${contato.id} - ${contato.nome}
como se eu só tivesse pedido pra imprimir essa linha ?!