Carregar uma combo em JSP

10 respostas
K

opa....olá a todos do forum

eu sô meio novato em java quanto mais utilizando JSP...mas eu sô o tal do cara curioso.....husahusahusa....e tô tentando desenvolve um sisteminha aki....bom vamos ao meu problema

eu tenho 3 combobox no meu sistema....quando a pessoa selecionar algum valor na 1º combo (onchange), a 2º irá receber os valores resultantes de um select no banco....e a 3º combo por sua vez irá receber tbm os valores resultantes de outro select d acordo com a opção selecionada na 2º combo

tenho problema na seguinte linha
Statement s = connection.createStatement();
na verdade não é um erro, mas sim ele passa direto por este passo e já retorna minha variavel cadastroList, ou seja, VAZIA, q esta ae no codigo abaixo

eu até tentei de várias maneiras resolve isso, mas enfelizmente não tive sucesso...agora tô tentando faze assim....vamos ao codigo

JSP

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<jsp:useBean id="dbBean" scope="application" class="Controle.DbBean"/> 
<%@ page import="Controle.CadastroVO" %>

<html>
    <body>
....
....
....

        <label id="staticText1" style="left: 46px; top: 204px; position: absolute" name="staticText1">Escola:</label>    
       
       <!-- ComboBox da Escola -->
 
       <form name="form1" style="height: 20px; left: 164px; top: 204px; position: absolute; width: 216px">
            <select name="menu1" onchange="<%String escola = request.getParameter("menu1");%>">
                <option value="-2" selected>Selecione a Escola</option>
                <option value="-1">-------------------------</option>
                <option value="1">Escola 1</option>
                <option value="2">Escola 2</option>
                <option value="3">Escola 3</option>           
            </select>
        </form>    
        
        <label id="staticText2" style="left: 460px; top: 204px; position: absolute" name="staticText2"> da Turma:</label>

        <!-- ComboBox Turma -->

        <form name="form2" style="height: 20px; left: 594px; top: 204px; position: absolute; width: 216px">
            <select name="menu2" onchange="<%String turma = request.getParameter("menu2");%>">
                <option>Turma</option>
                <option></option>                  
                <%                
                    ArrayList turmas = dbBean.getTurmas(escola);
                    Iterator iterator = turmas.iterator();
                    while (iterator.hasNext()) {
                        CadastroVO cadastro = (CadastroVO) iterator.next();                    
                %>
                <option><%=cadastro.getTurma()%></option>
                <%}%>             
            </select>
        </form>
        
        <label id="staticText3" style="left: 46px; top: 285px; position: absolute" name="staticText3">Nome:</label>

        <!--ComboBox Nome -->

        <form name="form3" style="height: 20px; left: 164px; top: 285px; position: absolute; width: 526px">
            <select name="menu3" onchange="<%String dados = request.getParameter("menu3");%>">
                <option>Nome</option>
                
                <% 
                    ArrayList nomes = dbBean.getAlunos(turma);
                    Iterator iterator1 = nomes.iterator();
                    while (iterator1.hasNext()) {
                        CadastroVO cadastro1 = (CadastroVO) iterator1.next();
                %>

                <option><%=cadastro1.getNome()%></option>
                <%}%>

            </select>
        </form>
       .....
       .....
       .....

Bean onde irá fazer os Selects

package Controle;

import Controle.DbBean;
import java.sql.DriverManager;

import java.util.Hashtable;
import java.util.ArrayList;
import java.util.Enumeration;

import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.Connection;

import Controle.CadastroVO;
import Controle.PerguntaVO;

public class DbBean
{
    public String dbUrl = "";
    public String dbUserName = "";
    public String dbPassword = "";
    
    public void setDbUrl(String url)
    {
        dbUrl = url;
    }

    public void setDbUserName(String userName)
    {
        dbUserName = userName;
    }

    public void setDbPassword(String password)
    {
        dbPassword = password;
    }
   
    public ArrayList getTurmas(String escola) throws Exception
    {
       
        ArrayList cadastroList = new ArrayList();

        try
        {
            Connection connection = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
            
            //Linha q insiste em não executar... :p
            Statement s = connection.createStatement();
            
            String sql = "SELECT Distinct(turma) FROM infoalunos WHERE escola = " + escola + "ORDER BY turma";
            ResultSet rs = s.executeQuery(sql);
            
            
            while (rs.next())
            {
                CadastroVO cadastro = new CadastroVO(); 
                cadastro.setTurma(rs.getString("turma"));
                cadastroList.add(cadastro);
            }
            
            
            rs.close();
            s.close();
            connection.close();
        }
        catch (Exception e)
        {
        }
        return cadastroList;
    }    
    
    public ArrayList getAlunos(String turma) throws Exception
    {
        ArrayList cadastroList = new ArrayList();
               
        try
        {
            Connection connection = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);

            //Linha q insiste em não executar... :p
            Statement s = connection.createStatement();
            String sql = "SELECT nome FROM infoalunos WHERE turma = " + turma + "ORDER BY nome";
            ResultSet rs = s.executeQuery(sql);

            
            while (rs.next())
            {
                CadastroVO cadastro = new CadastroVO();
                cadastro.setNome(rs.getString("nome"));
                cadastroList.add(cadastro);
            }
            
            
            rs.close();
            s.close();
            connection.close();
        }
        catch (Exception e)
        {
        }
        return cadastroList;
    }

Servlet

package Controle;

import Controle.DbBean;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class ServletController extends HttpServlet
{
    public void init(ServletConfig config) throws ServletException
    {
        ServletContext context = config.getServletContext();
        DbBean dbBean = new DbBean();
        dbBean.setDbUrl("jdbc:mysql://localhost:3306/meubanco");
        dbBean.setDbUserName("usuario");
        dbBean.setDbPassword("senha");
        context.setAttribute("dbBean", dbBean);
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
        }
        catch (ClassNotFoundException e)
        {
            System.out.println(e.toString());
        }
        super.init(config);
    }

aceito qlqr tipo de sugestão, ou ainda c tiver algum geito mais facil de fazer isso.....obrigado pela atenção

10 Respostas

H

Olá killer,

Para este tipo de aplicação, recomendo você dar uma olhada em AJAX… resolve muito bem em um tempo muito rápido.
http://ajaxtags.sourceforge.net/

[]

K

e ae h6…até tenho interesse msm d mexer com ajax e futuramente dar uma incrementada em alguma cosisa no projeto e tals…mas a ideia principal seria utilizar somente JSP…e tem otra, eu nunka mexi com ajax…husahusahhusauhsa…

mas msm assim vlw a dica

h6:
Olá killer,

Para este tipo de aplicação, recomendo você dar uma olhada em AJAX… resolve muito bem em um tempo muito rápido.
http://ajaxtags.sourceforge.net/

[]

H

killer,

É que, só com JSP… vai acontecer que terá que atualizar a página (ou frame) no “onChange” do combo… ou seja, qdo o usuário selecionar o primeiro, terá que chamar a página novamente carrengando o outro a partir do que o usuário selecionou (lento :twisted: ).
Não sei se captou a idéia, mas dá pra fazer, claro.

[]

K

h6

Captei vossa mensagem…uhsauhsausha…mas é q o projeto jah tah quase tudo pronto…e c eu fosse colocar ajax teria q estudar, ver como funciona e tals…nunka mexi com esse bixim… ^.^

no maximo queria usar JavaScript…é otra coisa q tbm nunka usei…heheheheheh

P

Nesse seu caso no onChange dos combos devem ser chamadas funções que submete a página para ela mesma e colocar um if pegando a acão:

<script>
function carregaCombo(acao){
  document.forms[0].acao.value=acao;
  document.forms[0].submit();
}
</script>

Montando as combos

if(acao.equals("xpto")){
    //monta sua combo
   //obter o request necessario
}
K

o problema é o siguinte, me corrija c eu estiver errado, toda variavel criada em JavaScript não poderá ser vista pelo meu código java

por exemplo c eu fizer um script pra pegar o q foi selecionado na combo
eu não vô pode usa essa minha varival pra faze o select no banco

exemplo
c eu usar o seguinte código

onchange="verSelect(menu1)"

ele vai executar minha função:

<script> function verSelect(opcao) { ValorCombo = opcao.selectedIndex } </script>

eu não posso usar essa minha variavel ValorCombo ae do meu codigo acima pra fazer o slect no banco

ArrayList turmas = dbBean.getTurmas(ValorCombo);
P

Voce pode jogar em um campo hidden essa variavel e obter via request:

function enviaCombo(cod,acao){
   document.forms[0].cod.value = cod;
   document.forms[0].acao.value = acao;
   document.forms[0].submit();

}

Crie o campo hidden para cada codigo passado e para a acao:

<input tyoe="hidden" name="cod1">
<input tyoe="hidden" name="cod2">
<input tyoe="hidden" name="acao">

Nas combos

<select name="xpto" onchange="enviaCombo(this,'montaCombo1')">
...

Agora monte os requests e tera os valores

int cod1 = 0;
int cod2 = 0;
if(request.getParametter("cod1")!=null){
    cod1 = Integer.parseInt(request.getParametter("cod1"));

}
...
K

putz, apesar d não entender muito de JavaScript vô tenta faze isso, ou melhor vô pedi uma ajuda prum colega meu aki ele vai decifra pra mim a sua idéia ae…huashuashuashuas

não leve a mal, é q eu ainda sou um aprendiz nesse ramo

mas xô v c eu entendi, no caso eu posso passa então essa variavel cod1 pra minha classe BEAN pra ela faze o select?

ArrayList turmas = dbBean.getTurmas(cod1);

obrigado pela compreenção

M

Olá amigo… Cara, vou te dar um concelho que me ajudou muito… Eu tinha muitas duvidas do que eu podia e não podia fazer nos jsp e ficava tentando fazer coisas que jamais iriam funcionar… Então dá uma lida sobre o assunto jsp… verifique o funcionamento deles, vc irá descobrir que JSPs são classes (servlets) traduzidas pelo container (tomcat por exemplo) e que elas são traduzidas uma unica vez(em geral quando vc chama ela pelo browser pela 1ª vez)… Dah uma estudada sobre isso, vai te ajudar bastante acredito eu…

Espero ter ajudado, flw…
Mauricio Palmeira Maistrello

K

justamente…ótima idéia…:smiley: :smiley:
uahshusahusa…até aceito sua idéia, má é q eu tava tentando fazer um sisteminha aqui para o serviço onde eu trabalho e aqui o povo num ké sabe muito c vc tem q estudar ou não e sim querem q funcione…dai eu vô pedindo uma ajuda com um depois com otro dai um fala pra usa ajax, otro php, otro JavaScript…mas como num conheço nenhuma dessas linguagens resolvi apelá para o forum e ver c alguem me dava uma direção a ser tomada

abraços

Criado 27 de abril de 2007
Ultima resposta 3 de mai. de 2007
Respostas 10
Participantes 4