Ajuda Urgente - Lista drop-down

8 respostas
Sergiorsilva

Boa noite pessoal do GUJ sou eu novamento com mais uma dúvida!

Tenho uma lista drop-down na minha JSP, quando algúm ítem dessa lista é selecionado automaticamento é feito um submit para minha servlet que recebe o parâmetro, em seguida devolvo esse valor para JSP para que o campo da lista drop-down tenha o item que foi selecionado anteriormente. O problema tá aqui, não consigo deixa o valor que eu escolhi selecionado!

Vou postar meu código!

Segue o trexo da JSP:

<%@page contentType="text/html" pageEncoding="ISO-8859-1"%>
<%@page import="br.com.sun.dhd.modelo.*" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">



<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Página de Teste</title>
    </head>
    <body>
        <form name="formTeste" action="ServletAtivo" method="post">
            <fieldset>
                <legend>Cadastro de Ativos:</legend>
                <span>
                    <label for="fabricante">Fabricante:</label>
                </span>
                <select name="fabricante" onchange="javascript:document.formTeste.submit();" tabindex="1">
                    <option value="-1">Selecione o Fabricante</option>
                    <c:forEach var="listaFabricantes" items="${requestScope['fab']}">
                        <option value="${listaFabricantes.id}" ${listaFabricantes.id == fabSelecionado ? 'selected' : ''}> ${listaFabricantes.fabricante}</option>
                    </c:forEach>
                </select>                
            </fieldset>
        </form>
    </body>
</html>

Agora a Servlet!

public class ServletAtivo extends HttpServlet {

    private ArrayList<Fabricante> fabricantes = new ArrayList<Fabricante>();
    DAOFabricante daoFab = new DAOFabricante();

    @Override
    public void init() throws ServletException {
        daoFab.getConsulta();
    }

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=ISO-8859-1");

        request.setAttribute("fab", fabricantes);

        if(request.getParameter("fabricante") == null) {
            request.setAttribute("fab", daoFab.getConsulta());
        }

        if (request.getParameter("fabricante") != null && !request.getParameter("fabricante").equals("-1")) {

            for (Fabricante f : fabricantes) {
                if (f.getId() == Integer.parseInt(request.getParameter("fabricante"))) {
                    String fabSelecionado = Integer.toString(f.getId());
                    request.setAttribute("fab", daoFab.getConsulta());
                    request.setAttribute("fabSelecionado", fabSelecionado);
                    break;
                }
            }
            request.setAttribute("fab", daoFab.getConsulta()); //Preciso devolver a lista de Fabricantes

        }

        request.getRequestDispatcher("/teste.jsp").forward(request, response);

    }

Pessoal, se poderem me ajudar vou agradecer muito, estou aprendendo a usar a biblioteca JSTL ainda.

Att.

8 Respostas

Sergiorsilva

Ajuda Urgente!

Gustavo_Sperandio

Testou remover a linha:

Selecione o Fabricante
Sergiorsilva

Olá Gustavo Sperandio, removi a linha inteira e não mudou nada!

Sergiorsilva

Up!

Pessoal, poderia me ajudar!

Att.

Gustavo_Sperandio

Sergiorsilva, eu não entendo muito da servlet do jeito que você esta usando, mas para min o problema é que a pagina deve estar dando submit e perdendo a referencia, uma coisa que eu não consegui percebe é: onde fica o valor selecionado? tem ele na pagina?

Sergiorsilva

Logo quando eu chamo a servlet, no método init() é chamado o método consultar da DAO, que retorna um ArrayList usado para criar a lista com o nome dos fabricantes.

Primeiro a servlet recupera do bando os fabricantes e faz um Dispatcher para a página teste.jsp, na teste.jsp os valores do são preenchido com os valores da lista:

<select name="fabricante" onchange="javascript:document.formTeste.submit();" tabindex="1">  
    <option value="-1">Selecione o Fabricante</option>  
        <c:forEach var="listaFabricantes" items="${requestScope['fab']}">  
            <option value="${listaFabricantes.id}" ${listaFabricantes.id == fabSelecionado ? 'selected' : ''}> ${listaFabricantes.fabricante}</option>  
        </c:forEach>  
</select>

Até ai tá funcionando!

Código fonte em HTML que está gerando:

<select name="fabricante" onchange="javascript:document.formTeste.submit();" tabindex="1">
                    
                    
                        <option value="1" > EPSON</option>                        
                    
                        <option value="2" > Lexmark</option>                        
                    
                        <option value="3" > HP</option>                        
                    
                        <option value="4" > Sinus Triad</option>                        
                    
                        <option value="5" > LG</option>                        
                    
                        <option value="6" > DELL</option>                        
                    
                        <option value="7" > Sansung</option>                        
                    
                        <option value="8" > Sony</option>                        
                    
</select>

Agora por exemplo, se eu selecionar o fabricante Sony que possuí o value = "8" o evento onclick chama a mesma servlet que chamou essa página, mas agora o request.getParameter("fabricante") não é nulo e devia pegar o valor e enviar para a JSP teste.jsp novamente para que Sony do value = "8" esteja selecionado quando a página for carregada novamente!

Fiz o teste, dentro da minha servlet mandei imprimir o request.getParameter("fabricante"); e tá funcionando normal!

Mas ainda não consegui resolver isso!

E agora? :(

Gustavo_Sperandio

Idéia meio maluca mas pode dar certo: e se você fizer uma validação quando tiver o código já selecionado você coloca ele na frente dos outros tipo:
Tem la a lista você selecionou o código 8 quando submeter verifica se o código esta preenchido quando for na DAO buscar a lista, adiciona o item do código 8 primeiro dai os demais.
Deu para entender a idéia?

Sergiorsilva

Deu sim, vou tentar e em seguida posto aqui!

Criado 28 de março de 2011
Ultima resposta 29 de mar. de 2011
Respostas 8
Participantes 2