Jsp + combobox não mostrando nada

boa tarde pessoal

não to conseguindo mostrar os dados nesse seguinte código:

<select name="rua"> <option value=""> Selecione uma rua </option> <% while (rs.next()) { %> <option value="<% rs.getString("NOME_RUAS"); %>"><% rs.getString("NOME_RUAS"); %></option> <% } %> </select>

simplismente não aparece nada, apenas o “selecione uma rua”

o que ta errado será???

obrigado desde já

tenta assim:

Não deixe codigo Java na sua páina JSP, não é seguro, e dificulta a programação.

Tem certeza que esá reornando dados no banco ai no seu result set?

De fato não há nada de errado em se escrever código java em JSPs, muito menos isso represeta uma falha de segurança.

O que acontece é que a anos se sabe que não se deve misturar lógica de negócios dentro de uma view (padrão MVC) como se fazia na época em que o desenvolvimento de sistemas web em java erá JSP centric. Infelizmente ao longo dos anos essa idéia foi sendo destorcida até um ponto em que se passou a acreditar que escrever código java em um JSP é ruim.

Na verdade muitos frameworks populares como o RubyOnRails usam código da linguagem (nesse caso Ruby) nas views.

É importante perceber a diferença entre lógica de negócios e de apresentação. A lógica de apresentação são essas decisões que fazemos na view como:

//
// Isto é pseudo-código. Não é Java nem JSP.
//
if (usuario.isLogado()) {
  mostrarBotaoLogout();
}
else {
  mostrarPainelLogin();
}

Esse tipo de lógica naturalmente pertence a view e é la que ela deve estar.

De qualquer forma, em JSP é possivel fazer a mesma coisa com TagLib e custom tags.

Já li algo afirmando que com o acesso ao banco direto do jsp, fica mais fácil o uso de sql injections

Risco de segurnça não sei ,mas acesso a banco de dados no jsp é horrível . :twisted:

O acesso à base de dados feito diretamente de um JSP tão pouco é um problema tão abominavel quanto alguns artigos ou mesmo livros tentam fazer parecer. Como programadores nós precisamos ser pragmáticos pois a adesão irrestrita à certos dogmas cria mais problemas que resolve. È evidente que eu não estou defendendo o uso de scriptlets para espalhar código JDBC por todo um JSP. Ao invés as taglibs possuem tags como sql:query que podem simplificar consideravelmente a taréfa de criação de tabelas de dados por exemplo.

hummm, to qrendo fazer do modo correto, nao misturando cod java com jsp, mas to começando agora em desenvolvimento web via jsp, ja baixei uma apostila, mas mesmo assim apanho bastante…

da uma olhada nesse cod pra ver se to no caminho correto:

[code]package gesobras;

import db.ConexaoDB;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import javax.servlet.http.HttpServlet;

/**
*

  • @author petter
    */
    public class Controle extends HttpServlet{

    public Collection listar() throws SQLException, ClassNotFoundException{
    ConexaoDB conexao = new ConexaoDB();
    conexao.conecta();

     conexao.executeSQL("select * from estados where pai_codigo = 1");
    
     ArrayList dados = new ArrayList();
    
     while(conexao.resultset.next()){
    

// Dado dado = new Dado();
// dado.setSigla(conexao.resultset.getString(“SIGLA”));
// dado.setEstado(conexao.resultset.getString(“ESTADO”));
//
// dados.add(dado);
}
conexao.resultset.close();
return dados;
}

} [/code]

já na jsp

[code]<%@page contentType=“text/html”%>
<%@page pageEncoding=“UTF-8”%>

<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>

:: Lista de estados e siglas - BRASIL ::
<h1>Lista de estados e siglas - BRASIL</h1>
<%-- Cria um usebean para utilizar o Servlet --%>
<jsp:useBean id="listagem" scope="application" class="gesobras.Controle" />

<%-- Faz um set para retornar os valores do arraylist do Servlet --%>
<c:set var="dados" value="${listagem.dados}" />

    <table border="0" cellpadding="0" cellspacing="0">
        <c:forEach var="dados" items="${dados}" varStatus="s">
            <c:choose>
                <c:when test="${s.count % 2 == 0}">
                    <tr bgcolor="#aaaaaa">   
                </c:when>
                <c:otherwise>
                    <tr bgcolor='#dddddd'>
                </c:otherwise>
            </c:choose>
            <td>${dado.estado}</td>
            <td>${dado.sigla}</td>
            </tr>
        </c:forEach>
    </table>
    <br>
    <br>
    <p align="center"><a href="index.html" title="Página principal do teste">Voltar</a></p>
</body>
[/code]

to no caminho certo?

valeu

Este ultimo código está bem melhor mas é ideal evitar a mistura de sql com código de lógica. De uma olhada no pattern DAO. Para o seu caso o uso da tag sql:query pode simplificar o seu código consideravelmente e provavelmente eliminar a necessidade da Servlet.

PS.: A tag sql:query pode ser util para criar selects e tabelas mas eu não aconselharia o uso das demais tags <sql: pois isso provavelmente iria violar o encapsulamento espalhando lógica de persistência na view.

Na boa, taglib pra acessar banco de dados é tão pernicioso quanto usar scriptlet pois ignora que a visão não deve acessar diretamente banco.

Além de ser um inferno pra dar manutenção pois eu já passei por isso :evil:, esse tipo de pragmatismo pra mim é bom pra quem faz e uma puta de uma gamb pra quem ter que manter.

Com relação a lógica de apresentação concordo plenamente.

Hoje em dia não há desculpa de não usar servlet pois se configura com annotation , tranquilo.

bom, entao estou no caminho certo luiz_renato???

só uma dúvida, que nao consigo resolver aki neste computador que está instalado o tomcat 7 e firebird 2.5:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    

nessa linha acima nao consigo tirar o erro de nenhuma maneira…

o que pode ser???

valeu

Verifica se os arquivos jstl-api.jar e jstl-imp.jar estão na pasta WEB-INF/lib

Hã e aqui &lt;%@page contentType="text/html"%&gt; &lt;%@page pageEncoding="UTF-8"%&gt;
tem um espaco entre @ e page

&lt;%@ page contentType="text/html" %&gt;
&lt;%@ page pageEncoding="UTF-8" %&gt;

humm, eu uso o netbeans e só tem a pasta WEB-INF nao tem a lib, como faço?

valeu

Confirma nas propriedades do seu projeto a parte de libraries e vê sem tem as libs do jstl.

ta ok, to começando a entender… pouco, mas gostaria de mais algumas dicas…

tipo aki

da onde tiro essas informações…

[code]
Dado dado = new Dado();
dado.setSigla(conexao.resultset.getString(“SIGLA”));
dado.setEstado(conexao.resultset.getString(“ESTADO”));

dados.add(dado); [/code]

só lembrando que tirei esse código daki do fórum para eu estudar…

valeu

alguém pra da uma ajuda por ai???

valeu