Exibir Combobox em JSP

4 respostas
W

Olá a todos,
Pessoal, como faço para preencher minha combo automaticamente na Pagina JSP?. Já tenho minha classe DAO onde uma Lista é implementada e meu Servlet onde crio um objeto dessa lista, está tudo funcionando, mas para mim preencher a combo, tenho que chamar meu Servlet para passar a opção de “Ação” para ser executada, tipo, ao invés de chamar o Servlet com a sua ação, quero apenas quando abrir a pagina JSP os combo já sejam preenchidos com dados do Banco de Dados. Olhem o codigo abaixo:

[color=green]// Trecho da minha Classe DAO com o metodo para preencher a lista:[/color]

public List <Secretarias> getLista() throws SQLException {  
       
        String sql = "SELECT * FROM TABSECRETARIAS ORDER BY CODSECRETARIA";
        PreparedStatement stmt = this.conn.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
// Select com cursor   
List <Secretarias> list = new ArrayList<Secretarias>();   

while (rs.next()) {   
            // Criando objetos   
              Secretarias secretaria = new Secretarias();
              secretaria.setId(rs.getInt("CODSECRETARIA"));
              secretaria.setSecretaria(rs.getString("secretaria"));
               secretaria.setTelefone(rs.getString("telefone"));
              list.add(secretaria); 
              }   

rs.close();
stmt.close();
return list; 
}

[color=green]// Trecho do Meu Servlet onde verifica qual ação será executada[/color]

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
     .
     .
     .
else if(cmd.equalsIgnoreCase("chamadoSecretaria")){
              List listChamado = dao.getLista();
              request.setAttribute("Secretarias", listChamado);
              rd = request.getRequestDispatcher("/frmInserirChamados.jsp");

       //Aqui é chamado a lista para preencher a minha <select> na pagina JSP

             }else if(cmd.equalsIgnoreCase("comboAtendimento")){
              List comboSecretaria = dao.getLista();
              request.setAttribute("listarSecretarias",comboSecretaria);
              rd = request.getRequestDispatcher("/frmInserirAtendimento.jsp");
              
             }
rd.forward(request, response);


}catch(Exception e){
           e.printStackTrace();
           throw new ServletException(e);
         }
        }
.
.
.

[color=green]// Minha Página JSP onde chamo minha lista para preencher a combo[/color]
[google]

<tr>
 <td>Secretaria:</td>    
   <td><select name="codSecretaria" class="campos">   
               <option value="">.................. Selecione uma Secretaria...................</option>   
              <c:forEach var="nomeSecretaria" items="${listarSecretarias}">   
                              <option value="${nomeSecretaria.id}">   
                                                     ${nomeSecretaria.secretaria}   
                              </option>   
              </c:forEach>   
  </select></td>
</tr>

Se eu chamar a página passando o Servlet dessa forma:

http://localhost:8080/OrdemServicoOnline/ServletSecretarias?cmd=comboAtendimento

Ele executa normal e preenche o combo, mas dessa forma, se eu tiver mais de um combo na minha pagina, terei que chamar mais de dois Servlet ao mesmo tempo, acho que seria impossivel, como chamo esse metodo do meu Servlet na JSP para preencher a combo? Onde deveria colocar o codigo de preencher a combo no Servelet, no processRequest mesmo?

Conto com a Ajuda de todos vocês
Att,

4 Respostas

C

tenta algo assim: na sua tela jsp, em cima do codigo html, abra um scriptlet nesse estilo:

<%

//instancia seu servlet e chama o metodo q retorna a lista

seuServlet.processRequest(request, response);

//recupera a lista na tela jsp

List<Secretarias> listaSecretarias = (List<Secretarias>) request.getAttribute("listarSecretarias");

%>
W

E ae cristianonasciment , obigado pela a ajuda, mas não posso colocar Scriptlet na minha JSP, pois a aplicação está em MVC, não quero fugir do paradigma, como eu fazeria isso no meu Servlet?

W

Alguém?

J

Ola.

Entao, no seu caso, com certeza a melhor solução seria utilizar uma TAG FILE.

Você cria uma tag, onde você passa todos os dados, os atributos,
e a tag file criada por voce cria o combobox e popula para você.

Com toda certeza isso seria a melhor solução pois evitaria soluções não elegantes.

Outra possibilidade seria criar uma Expression Language Function,
mas isso seria algo não bom, pois não seria MVC. Com a EL function você
pode chamar uma função de qualquer classe, desde que seja static o metodo chamado.

Mas com toda certeza te indicaria usar TAG FILE, ou SIMPLE TAG ou
o não muito recomendado EXPRESSION LANGUAGE FUNCTION.

Criado 30 de novembro de 2010
Ultima resposta 1 de dez. de 2010
Respostas 4
Participantes 3