Listar uma query usando JSTL

Pessoal estou iniciando o estudo em JSP e com a maior dificuldade em um
quesito e gostaria de pedir ajuda de voces. Estou querendo listar uma query
em um JSP utilizando JSTL. Já estou quase 10 horas pesquisando no Google,
não estou conseguindo sucesso.
Obs: A conexao com o Oracle e a conulta à tabela está perfeita, o unico
problema é o retorno, pois só apresenta a ultimo registro. Percebi que
getNome() percorre todos os registros, mas não estou conseguindo armazenhar
todo os registros em um objeto para ser listado via forEach do JSTL. Nem
mesmo na classe Testar.java
Já tentei com List Map mas tambem não consegui.
Segue abaixo o codigo:

******** ConexaoOra.java - Conexao Oracle
import java.sql.*;
public class ConexaoOra {

public static String status = “”;
public static Statement stm = null;
public static Connection conn = null;

public static Connection obterConexao() {
Connection con = null;
ResultSet rs;
String SQL = null;

status = “Conexão aberta!”;

try{
DriverManager.registerDriver (new
oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection
(“jdbc:oracle:thin:@servidor:1521:BABCO”, “USUARIO”, “SENHA”);
stm = conn.createStatement();
}

catch (SQLException e) {
status = e.getMessage();

}
catch (Exception e) {
status = e.getMessage();
}

return conn;
}
}

******* GuestJP.classe SETs GETs

public class GuestJP {

String nomeadverso = “”;
String idregistro = “”;

public void setIdregistro (String idregistro) { this.idregistro =
idregistro;}
public String getIdregistro() {return this.idregistro;}

public void setNomeadverso (String nomeAdverso) { this.nomeadverso =
nomeAdverso;}
public String getNomeadverso() {return this.nomeadverso;}

}


public class JanelaPrincipal {

GuestJP guest = new GuestJP();

ResultSet rs;
Statement stm = null;
private String SQL = null;
String URL = null;
private String status = “”;

public String pesquisacampo = “”;
public void setPesquisacampo (String pesquisacampo) { this.pesquisacampo =
pesquisacampo.toUpperCase();}
public String getPesquisacampo() {return this.pesquisacampo;}

getPesquisacampo()

}

// metedo que carrega a query

public List getNome() throws SQLException {

    String executarSQL = "select * from vista_arquivo_geral where 

nome_adverso like(’"+getPesquisacampo()+"%’) order by nome_adverso";
Connection conn = ConexaoOra.obterConexao();
stm = ConexaoOra.stm;
rs = stm.executeQuery(executarSQL);
List list = new ArrayList();

    GuestJP guestjp = new GuestJP();

    while (rs.next()) {

     guestjp.setNomeadverso(rs.getString("nome_adverso"));
     guestjp.setIdregistro(rs.getString("id_reg"));

      System.out.println(guestjp.getNomeadverso() +" - "+ 

guestjp.getIdregistro() ) ;
}
list.add(guestjp);
rs.close();
stm.close();
return list;
}
}

******** Testar.java - Testar retorno

import java.sql.SQLException;
import java.util.*;

public class Testar {

public static void main(String[] args) {

JanelaPrincipal jp = new JanelaPrincipal();

jp.setPesquisacampo(“CARLOS”);

try{
List guestListOpcoes = jp.getNome();
Iterator guestListIterator = guestListOpcoes.iterator();
GuestJP guestjp;

while ( guestListIterator.hasNext() )
{
guestjp = ( GuestJP ) guestListIterator.next();

System.out.println(guestjp.getNomeadverso() +" - "+ 

guestjp.getIdregistro() ) ; /// AQUI RETORNA SOMENTE O ULTIMO REGISTRO

}

} catch (SQLException e) { System.out.println("Mensagem do sistema:
"+e.getMessage()); }
}
}

********* pagina JSP

<%@page isELIgnored=“false”%>
<%@ taglib uri=“http://java.sun.com/jstl/core” prefix=“c” %>
<%@taglib uri=“http://java.sun.com/jstl/fmt” prefix=“fmt”%>
<%@taglib uri=“http://java.sun.com/jstl/sql” prefix=“sql”%>

<jsp:useBean id=“jp” class=“br.com.conpro.web.JanelaPrincipal” />

<c:set var=“Lista” value="${jp.nome}" scope=“session” />
<c:forEach var=“obj” items="${Lista}">
<tr>
<td width=“100%”>:<c:out
value="${obj.nomeadverso}<br />" escapeXml=“false” /> </td>
</tr>
</c:forEach>

Talvez pq voce só esta adicionando o ultimo registro na sua lista.

 while (rs.next()) {

GuestJP guestjp = new GuestJP();
guestjp.setNomeadverso(rs.getString("nome_adverso"));
guestjp.setIdregistro(rs.getString("id_reg"));

System.out.println(guestjp.getNomeadverso() +" - "+
guestjp.getIdregistro() ) ;
}
list.add(guestjp); 

o list.add deveria estar dentro do loop.

[]´s

Carlos

Valeu Chara, era bem isso, nada como conhecer a coisa. Dois dias quebrando a cabeça e era um detelhe tão simple. Na classe Testar agora esta é listando toda a query.

Agora está faltando disifrar o JSTL pois no JSP não quer rodar, creio que esteja falta algo alem disso:

<c:set var=“Lista” value="${jp.nome}" scope=“session” />

<c:forEach var=“obj” items="${Lista}">


:<c:out value="${obj.nomeadverso}
" escapeXml=“false” />

</c:forEach>

Estou achando que esteja faltando alguma referencia a classe GuestJP, se for isso não tenho ideia de como fazer essa referencia. Se alguem ai poder ajudar a solucionar ficarei muito grato.

Carlos Geiser.

Caro colega, acredito que para que vc possa listar estes itens seja necessário que este lista ou vá para dentro de um objeto request ou para uma sessão. Como vc naum está utilizando servlet ou outro tipo de controlador o código ficaria mais ou menos assim:

<%@ page import=“java.util.List” %>
<%@ page import=“br.com.conpro.web.JanelaPrincipal” %>

<%
JanelaPrincipal janela = new JanelaPrincipal();

 List lista = janela.getNome();
 request.setAttribute("lista",lista);

%>

<c:set var=“minhaLista” value="${lista}"/>
<c:forEach var=“obj” items="${minhaLista}">

:

Valeu Filipe, perfeito, rodou legal. Agradecido.

Mas só uma duvida, não tem como ser 100% JSTL, isso é, só funcionando usando com este bedaço de scriptlet:

<%
JanelaPrincipal janela = new JanelaPrincipal();

List lista = janela.getNome();
request.setAttribute(“lista”,lista);
%>

Não tenho nada contra scriptlet, é que me disseram que é uma tecnologia defazada. O legal é que se pode mesclar as duas tecnologias.

Passa sua lista por request em uma Servlet ou em algum controller dos frameworks, fuja de scriplets!!

[quote=Pedrosa]Passa sua lista por request em uma Servlet ou em algum controller dos frameworks, fuja de scriplets!!

[/quote]

Olá Pedrosa,
saberia me informar onde acho exemplos para trabalhar com request em uma Servlet.

[quote=carlosgeiser][quote=Pedrosa]Passa sua lista por request em uma Servlet ou em algum controller dos frameworks, fuja de scriplets!!

[/quote]

Olá Pedrosa,
saberia me informar onde acho exemplos para trabalhar com request em uma Servlet.

[/quote]

Qualquer livro de desenvolvimento web em Java vai ter isso Carlos, é o básico do básico. JSP deve ser usado SOMENTE na camada de apresentação. Mexer diretamente no request, só dentro de servlets!
Uma sugestão é o Head First Servlets & JSP, muito bom livro!