Passando valor do combobox para a servlet

13 respostas
I

Olá a todos!
Tenho uma página jsp que tem um combobox, como eu faço para passar o valor selecionado do combobox para a servlet.
Quando dou um request.getParameter, ele está me retornando null para o atributo que recebe o valor do combobox.
O meu combobox não está pegando nada do banco, está apenas com o valor informado em cada option.

Ex:

1 2 2

13 Respostas

R

Estranho hein?

Posta teu código completo.

I

Então vamos lá:

O código HTML:

<form name="form1" method="POST" action="Controle">
    
              <td width="71" bordercolor="#FFFFFF"><select name="bloco" >
                <option></option>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                    <option value="12">12</option>
              </select></td>
              <td width="55" bordercolor="#FFFFFF"><div align="right"><span class="style3">Box:</span></div>
              <div align="right"></div></td>
              <td width="87" bordercolor="#FFFFFF"><label>
                <select name="box" id="box" >
                  <option></option>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>

                </select>
                <div align="left"></div>
                </label></td>
            </tr>
          </table>
          <p>&nbsp;</p>
                <div align="center">
                  <input type="button" value=" Consultar "onClick="location.href='Controle?negocio=box.BoxConsultar'" />
                </div>

    <div>
                    <table border="0" align="center">
                        <div align="center">${msgErro}</div>

                <thead>
                    <tr bgcolor="lightgreen">
                        <td width="150">Box</td>
                        <td width="120">Bloco</td>
                        <td width="120">Localização</td>
                         <td width="100">Incluir</td>
                    </tr>
                </thead>


                <tbody>
            <c:forEach var="boxLivres" items="${boxLivres}">


                        <tr bgcolor="CadetBlue">


                            <td width="150">${boxLivres.box_numero}</td>
                            <td width="120">${boxLivres.box_bloco}</td>
                            <td width="120">${boxLivres.box_loca_id}</td>

                            <td width="100">
                               
                            </td>
                        </tr>

              </c:forEach>
                    </tbody>
                </table>
    </div>
</form>

A servlet:

public class BoxConsultar implements Comando {

    public void Executa(HttpServletRequest request, HttpServletResponse response) {
        String proximaPagina = "";
        String msgErro = "";
int b = Integer.parseInt(request.getParameter("bloco"));
int bl = Integer.parseInt(request.getParameter("box"));

        
        Box box = new Box();
        box = BoxDao.boxPegaUm(b, bl);

        if(msgErro.equals("")){
        proximaPagina = "/box/visualizarBoxLivres.jsp";
        request.setAttribute("boxLivres", box);
        }
        RequestDispatcher rd = request.getRequestDispatcher(proximaPagina);
    System.out.println("\npassou pelo despacho!!! ");

        try {

            rd.forward(request, response);

        }
        catch (ServletException ex) {
           System.out.println("Erro de Servlet: " + ex.getMessage());
        }
        catch (IOException ex) {
            System.out.println("Erro de IO: " + ex.getMessage());
        }
    }
   


}

O que acontece é que não estou conseguindo pegar no request.getParameter o valor passado pelo combobox.
O valor que está vindo é null.

I

Não estou conseguindo passar os parâmetros do checkbox pela URL, alguém pode me ajudar?

C

Olá,

O problema é que você não está submetendo o form. O teu botão é do tipo “button”, e você faz ele apenas direcionar para um outro link. Portanto nada do que você seleciona ou escreve no seu formulário está indo para o servidor.

A solução é mudar o botão para algo do tipo:

<input type="submit" value=" Consultar ">

Se você ainda precisar passar o parâmetro “negocio” pro seu servlet como você estava fazendo na declaração do teu botão, é só você declarar um campo hidden dentro do seu form:

<input type="hidden" name="negocio" value="box.BoxConsultar">

Pronto! Com isso você deve receber no servidor os dados do form (inclusive o campo “negocio”).

Abraço

I

Olá ctosin o problema é que tenho 2 tipos de consultas a serem efetuadas( cada uma com um botão diferente para ser clicado) e se eu colocar um submit ele irá realizar apenas uma consulta. Eu quero passar o link que chamará a servlet e passar os parâmetros juntos, estes parâmetros são os valores dos combobox.

Desde já muito obrigado!

C

Pra resolver isso, o mais comum é você usar uma função JavaScript. Você pode fazer algo assim:

function consultar(negocio) {
    document.forms[0].negocio.value = negocio;
    document.forms[0].submit();
}

Daí os seus botões podem ser declarados assim:

<input type="button" onclick="consultar('box.BoxConsultar');">

<input type="button" onclick="consultar('box.OutraConsulta');">

Pra que isso funcione, mantenha o campo hidden no seu form com o nome “negocio”.

Abraço

I

Caro ctosin esta fução eu irei fazer com que haja um submit quando eu clicar no botão, até ai tudo bem, só que o que estou querendo é passar parãmetros. Eu quero passar o link que chamará a servlet e passar os parâmetros juntos, estes parâmetros são os valores dos combobox.

Desde já muito obrigado.

C

Mas é exatamente isso que o submit faz: ele manda você para link que está descrito no atributo “action” da form e passa junto os valores dos componentes do formulário.

Por exemplo, se você tem um combo box chamado “bloco” onde você seleciona o valor “1” e um combo box chamado “box” onde você seleciona o valor “2”, no momento em que você fizer o submit, a URL será:

http://seuservidor/Controle?bloco=1&box=2

Pronto, você tem acesso aos valores dos campos do formulário do servidor. Você verá a URL desta forma apenas se você fizer o post pelo método GET. No código que você mostrou, você está usando POST. Portanto você não verá os dados na URL, mas eles chegarão ao servidor sim, pois eles vão internamente no cabeçalho HTTP.

Se os termos GET e POST não são claros pra você, recomendo que você tente entender bem como eles funcionam e qual a diferença entre eles, porque eles são a base de qualquer transferência de dados entre o cliente (browser) e o servidor.

Abraço

I

Olá ctosin acho que já estou te enchendo a paciência né?
Realmente este código que vc me passou está correto:

http://seuservidor/Controle?bloco=1&box=2

só que tem um problema pois eu tenho 8 opções de blocos no combobox e o usuário irá escolher um, não tem como eu passar o bloco específico por parâmetro. Eu tenho que passar a variável bloco só que quando eu pego ela na servlet ela vem como string bloco e não vem o valor do bloco.
Aproveitando o post desejo um feliz natal e um ano novo cheio de paz, amor, prosperidade e saúde!

C

Tem alguma coisa muito estranha acontecendo. Na teoria é assim que a coisa deveria funcionar. Me manda um exemplo simples do que você está tentando fazer e não consegue. Tipo um código HTML que você use pra submeter a opção selecionado de um combo para um servlet e não esteja funcionando. Manda também o código do servlet.

E obrigado, Boas Festas pra você também!
Abraço

I

Olá ctosin , obrigado por tudo!
Segue parte do código html:

<form name="form1" method="POST" action="Controle">   
       
              <td width="71" bordercolor="#FFFFFF"><select name="bloco" >   
                <option></option>   
                <option value="1">1</option>   
                <option value="2">2</option>   
                <option value="3">3</option>   
                    <option value="12">12</option>   
              </select></td>   
              <td width="55" bordercolor="#FFFFFF"><div align="right"><span class="style3">Box:</span></div>   
              <div align="right"></div></td>   
              <td width="87" bordercolor="#FFFFFF"><label>   
                <select name="box" id="box" >   
                  <option></option>   
                <option value="1">1</option>   
                <option value="2">2</option>   
                <option value="3">3</option>   
  
                </select>   
                <div align="left"></div>   
                </label></td>   
            </tr>   
          </table>   
          <p> </p>   
                <div align="center">   
                  <input type="button" value=" Consultar "onClick="location.href='Controle?negocio=box.BoxConsultar&bloco&box'" />   
                </div>   
  
    <div>   
                    <table border="0" align="center">   
                        <div align="center">${msgErro}</div>   
  
                <thead>   
                    <tr bgcolor="lightgreen">   
                        <td width="150">Box</td>   
                        <td width="120">Bloco</td>   
                        <td width="120">Localização</td>   
                         <td width="100">Incluir</td>   
                    </tr>   
                </thead>   
  
  
                <tbody>   
            <c:forEach var="boxLivres" items="${boxLivres}">   
  
  
                        <tr bgcolor="CadetBlue">   
  
  
                            <td width="150">${boxLivres.box_numero}</td>   
                            <td width="120">${boxLivres.box_bloco}</td>   
                            <td width="120">${boxLivres.box_loca_id}</td>   
  
                            <td width="100">   
                                 
                            </td>   
                        </tr>   
  
              </c:forEach>   
                    </tbody>   
                </table>   
    </div>   
</form>

Segue a servlet:

public class BoxConsultar implements Comando {   
  
    public void Executa(HttpServletRequest request, HttpServletResponse response) {   
        String proximaPagina = "";   
        String msgErro = "";   
int b = Integer.parseInt(request.getParameter("bloco"));   
int bl = Integer.parseInt(request.getParameter("box"));   
  
           
        Box box = new Box();   
        box = BoxDao.boxPegaUm(b, bl);   
  
        if(msgErro.equals("")){   
        proximaPagina = "/box/visualizarBoxLivres.jsp";   
        request.setAttribute("boxLivres", box);   
        }   
        RequestDispatcher rd = request.getRequestDispatcher(proximaPagina);   
    
  
        try {   
  
            rd.forward(request, response);   
  
        }   
        catch (ServletException ex) {   
           System.out.println("Erro de Servlet: " + ex.getMessage());   
        }   
        catch (IOException ex) {   
            System.out.println("Erro de IO: " + ex.getMessage());   
        }   
    }   
 
}

Ja tentei passar utilizando a tag param, usando o nome do atributo (bloco, box), se eu passar um valor específico ele aceita, agora pegando o valor da combobox ele não aceita, já tentei fazer com sessão só que fiquei perdido na hora de pegar no servlet os dados dos formulário passados pela sessão, pois os valores dos combobox não estão armazenados no banco e nem em beans e sim são valores que estão na página jsp. Pensei em criar uma tabela no banco com os blocos e os boxes, assim eu poderia usar um array e jogar em um objeto e puxá-lo pela sessão, só que estou tentando pegar apenas da jsp.

C

Mas esse código que você me mandou não passa os parâmetros mesmo. A passagem de parâmetros para o servidor é feita através de um submit no teu formulário, e em nenhum momento você faz um submit. É por isso que os dados não estão indo. Achei que depois da dica que eu te dei anteriormente, de que você precisa ter um submit na sua página, você tinha corrigido seu código já.

Enquanto o seu botão chamar apenas o “location.href” não vai funcionar. O location.href é usado para você redirecionar para uma outra URL, e isso não tem nada a ver com submeter dados fornecidos por um usuário em um formulário: redirecionar é uma coisa, submeter os dados é outra.

Pelo código que você me mandou, vejo que você precisa passar 3 informações para o servidor:

[list]Valor escolhido pelo usuário na combo “bloco”[/list]
[list]Valor escolhido pelo usuário na combo “box”[/list]
[list]Parâmetro extra de controle chamado “negocio” com o valor “box.BoxConsultar”[/list]

Troque o seu botão para isso:

<input type="submit" value=" Consultar ">

Então os valores escolhidos pelo usuário nas combos “bloco” e “box” serão submetidos e você poderá pegar os seus valores via request.getParameter() no servlet (toda vez que ocorre um submit, todos os valores dos componentes do formulário são enviados para o servidor).

Quanto ao parâmetro “negocio”, como já comentei, basta que você crie um campo hidden pra ele no teu formulário, que na hora da submissão ele irá junto:

<input type="hidden" name="negocio" value="box.BoxConsultar">

Recomendo que você vá atrás de algum material que ensine submissão de dados de formulários em HTML. Esse problema que você está tendo é algo realmente muito básico, que você vai usar toda vez que você tiver um formulário. Por esta razão isto deve estar muito claro pra você. E isto não tem nada a ver com JSP: é apenas HTML.

Abraço

I

Olá ctosin é que pensava eu que pelo location.href eu iria conseguir passar algum parâmetro do html, tipo quando vc usa a tag param ou quando você usa &.
Toda esta discursão gerada apenas para entender que o location.href não passa parâmetros.
Muito obrigado por sua atenção e por não ter desistido do tópico.
Que 2010 seja um ano próspero em todas as suas áreas!

Criado 17 de dezembro de 2009
Ultima resposta 29 de dez. de 2009
Respostas 13
Participantes 3