[RESOLVIDO] Problema com com <c:forEach> exibindo o mesmo resultado

6 respostas
felipeaqueiroz

Olá pessoal,
Estou com um problema aqui. Quando eu faço na minha página jsp:

<c:forEach items="${resultado} var="Filme">
     <tr>
          <td><c:out value="${Filme.nome}"></c:out></td>
          <td><c:out value="${Filme.genero}"></c:out></td>
          <td><c:out value="${Filme.ano}"></c:out></td>
     </tr>
</c:forEach>

OBS: resultado é um ArrayList passado por parâmetro em uma servlet:

request.setAttribute("resultado", filmes);
request.getRequestDispatcher("teste.jsp").forward(request, response);

OBS 2: Filme é um classe entidade com gets e sets normais

O jsp exibe o resultado sempre com o mesmo filme como resultado mas com o número de linhas da resposta correta. Por exemplo, quando eu faço o select no MySQL ele retorna 6 filmes e que o último da pesquisa é “Filme Qualquer”. No jsp ele retorna uma tabela de seis linhas com todas as informações sendo do “Filme Qualquer”.

Alguém sabe o que pode ser?

Já pesquisei aqui no fórum e não achei. Talvez não tenha procurado o suficiente, mas eu tentei.

Obrigado a todos pela ajuda

6 Respostas

gilmaslima

Seu código do forEach está correto, vc já verificou se o seu atributo List está com dados corretos?

paulo1911

Olá amigo, mostre o método que vc adiciona os filmes a lista.
Valeu

felipeaqueiroz

Olá essa parte fica na classe FilmeDAO

public ArrayList<Filme> Pesquisa(String tipo, String pesquisa){
			
		Filme filme = new Filme();
		ArrayList<Filme> filmes = new ArrayList<Filme>();
		
		try {
			
			Connection conn = ConnectionFactory.getConnection(); 
		
			
			
			String sql = "SELECT * FROM filmes WHERE " + tipo + " LIKE '%" + pesquisa + "%'";
			
			PreparedStatement stmt = conn.prepareStatement(sql); 
			ResultSet rs= stmt.executeQuery(); 
			
			
				while (rs.next()) {	
					filme.setId_filme(rs.getInt("id_filme"));
					filme.setNome(rs.getString("nome"));
					filme.setGenero(rs.getString("genero"));
					filme.setAno(rs.getInt("ano"));
					filmes.add(filme);
				}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return filmes;
	}

E essa fica em LocalizaFilmeServlet

String tipo = request.getParameter("tipo").toLowerCase();		
		String pesquisa = request.getParameter("pesquisa");
		
		FilmesDAO f = new FilmesDAO();
		
		Filme filme = new Filme();
		ArrayList<Filme> filmes = f.Pesquisa(tipo, pesquisa);
		
		request.setAttribute("resultado", filmes);
		request.getRequestDispatcher("teste.jsp").forward(request, response);
Kanin_Dragon

Jovem,

Dei uma olhada rapida no codigo e parece estar tudo ok, esse select ta belezinha ?

faz o seguinte … coloca upercase na coluna assim como no parametro da clausula where

paulo1911

Olá amigo:

veja o erro:

while (rs.next()) {   // aqui vc inicia o while certo?
                     filme.setId_filme(rs.getInt("id_filme"));  //&lt;-- Antes de setar vc precisa criar uma nova instancia do tipo Filme, ou seja crie outro objeto filma para conter os valores
                     filme.setNome(rs.getString("nome"));  
                     filme.setGenero(rs.getString("genero"));  
                     filme.setAno(rs.getInt("ano"));  
                     filmes.add(filme);  
                 }

ajuste para:

while (rs.next()) {  
                     Filme filme=new Filme(); // &lt;-- remova a linha onde vc instancia o filme antes do try e coloque aqui!!
                     filme.setId_filme(rs.getInt("id_filme"));  
                     filme.setNome(rs.getString("nome"));  
                     filme.setGenero(rs.getString("genero"));  
                     filme.setAno(rs.getInt("ano"));  
                     filmes.add(filme);  //&lt;-- OK! Adicionando um novo objeto filme a lista
                 }

Espero ter ajudado :smiley:
Fallow

felipeaqueiroz

Valeu paulo1911 e a todos.
Funcionou

Obrigado

Criado 6 de maio de 2011
Ultima resposta 6 de mai. de 2011
Respostas 6
Participantes 4