Solucionado (ver solução)
Solucionado
(ver solução)
15
respostas

Criar DropDowList

Boa Tarde Pessoal, podem me ajudar a completar meu código, não estou conseguindo criar um dropdowList puxando do banco de dados. Não to conseguindo criar o controller também.

Alguma dica ?

Obrigado !

-- DAO

package br.com.projeto.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import TablesBeans.Bancos;

@Repository
public class JdbcListaBancosDao {
    private final Connection connection;

    @Autowired
    public JdbcListaBancosDao(DataSource dataSource) {
        try {
            this.connection = dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public List<Bancos> listaBancos(Bancos banco) {

        try {
            List<Bancos> bancos = new ArrayList<Bancos>();
            PreparedStatement stmt = this.connection.prepareStatement("select * from bancos");
            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {

                banco.setIdBanco(rs.getLong("IdBanco"));
                banco.setNomeBanco(rs.getString("NomeBanco"));
                bancos.add(banco);
            }

            rs.close();
            stmt.close();
            return bancos;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

-- Bean

package TablesBeans;

public class Bancos {

    private int IdBanco;
    private String NomeBanco;

    public int getIdBanco() {
        return IdBanco;
    }
    public void setIdBanco(long l) {
        IdBanco = (int) l;
    }
    public String getNomeBanco() {
        return NomeBanco;
    }
    public void setNomeBanco(String nomeBanco) {
        NomeBanco = nomeBanco;
    }


}

---JSP

                    <select name="" id="" class="">
                    <option>
                        <c:forEach items="${}" var="">
                            <option value="${}">${}</option>
                        </c:forEach>
                    </option>
                    </select>
15 respostas

Olá Andre, tudo bem?

Qual erro que está acontecendo? Tem algum log do erro?

Abracos brow

OI Thiago, tudo bem.

Não tem log de erro, pq eu ainda nao tenho o controller e as variáveis do jsp. Eu nao consegui montar o controller, tentei pesquisar, mas sem sucesso.

Opa entendi, bom podemos começar o Controller da seguinte maneira:

@Controller
public class BancoController {

    @Autowired
    private JdbcListaBancosDao dao;

    @RequestMapping(value = "/listarBancos", method = RequestMethod.GET)
    public String listarBancos(Model model) {
        final List<Bancos> bancos = this.dao.listaBancos(new Bancos);
        model.setAttribute("bancos", bancos);
        return "telas/bancos"
    }
}
<select name="" id="" class="">
<option>
    <c:forEach items="${bancos}" var="banco">
         <option value="${banco.IdBanco}">${banco.NomeBanco}</option>
    </c:forEach>
</option>
</select>

Espero que estes exemplos te ajudem!!

Show de bola Thiago.

porém esses 2 trechos de código, estao sublinhado em vermelho.

model.setAttribute --- Aqui seteAttribute

return "telas/bancos" --- aqui no return, mesmo eu adaptando a minha view, que no caso é lista.jsp

A página carrega, mas o dropdow aparece em branco.

Opa,

Me mostra como vc está passando essses valores, pf?

Acho que seria isso ...

Eu alterei o return para home ok pra sair no formulario principal.

Controller

     @RequestMapping(value = "listaBancos", method = RequestMethod.GET)
        public String listarBancos(Model model) {
            final List<Bancos> bancos = this.dao.listaBancos(new Bancos());
            model.setAttribute("bancos", bancos);
            return "home"
        }

JSP

<label for="banco">Banco:</label>
    <select name="" id="" class="">
        <option>
            <c:forEach items="${banco}" var="banco">
                <option value="${banco.IdBanco}">${banco.Nome_Banco}</option>
            </c:forEach>
        </option>
    </select>

Opa, acabei de ver que a váriavel Nome_Banco não bate com o nome que está no objeto e que o nome da variável banco que está em items do c:forEach também não bate com o model.setAttribute:

Troca de

<c:forEach items="${banco}" var="banco">
     <option value="${banco.IdBanco}">${banco.Nome_Banco}</option>
</c:forEach>

para

<c:forEach items="${bancos}" var="banco">
     <option value="${banco.IdBanco}">${banco.NomeBanco}</option>
</c:forEach>

Sacou? Tmj man

Então man, é que eu tive que Alterar todo o Bean e e o DAO para Nome_Banco.

Pq eu havia criado assim no BD, depois que fiz testes pra retornar uma lista que saquei.

O erro do SetAttribute é esse = The method setAttribute(String, List) is undefined for the type Object

Ajustei os imports e o erro sumiu. agora a dropDowList esta aparecendo vazia. Abaixo meu cod atualizado.

Resultado do System.out.println("Bancos "+ bancos); Bancos [TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d, TablesBeans.Bancos@7b6a4d9d]

DAO

    public List<Bancos> listaBancos(Bancos banco) {

        try {
            List<Bancos> bancos = new ArrayList<Bancos>();
            PreparedStatement stmt = this.connection.prepareStatement("select * from bancos");
            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {

                banco.setIdBanco(rs.getLong("IdBanco"));
                banco.setNome_Banco(rs.getString("Nome_Banco"));
                bancos.add(banco);

            }

            rs.close();
            stmt.close();
            System.out.println("Bancos "+ bancos);
            return bancos;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

CONTROLLER

@Controller
public class ListaBancosController {

    private final JdbcListaBancosDao dao;

    @Autowired
    public ListaBancosController(JdbcListaBancosDao dao) {
        this.dao = dao;
    }

     @RequestMapping(value = "/home", method = RequestMethod.GET)
        public String listarBancos(Model model) {
            final List<Bancos> banco = this.dao.listaBancos(new Bancos());
            model.addAttribute("bancos", banco);
            return "home";
        }

JSP

<option>
            <c:forEach items="${bancos}" var="bancos">
                <option value="${banco.IdBanco}">${banco.Nome_Banco}</option>
            </c:forEach>
        </option>
    </select>

Isso agora neste ponto troca de bancos para banco no atributo var na jsp

Mudei e gerou o erro abaixo

insira org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/home.jsp at line 46

43:     <select>
44:         <option> Selecione um Banco
45:             <c:forEach items="${bancos}" var="banco">
46:                 <option value="${banco.IdBanco}">${banco.Nome_Banco}</option> 
47:             </c:forEach>
48:         </option>
49:     </select>código aqui
org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/home.jsp at line 46

43:     <select>
44:         <option> Selecione um Banco
45:             <c:forEach items="${bancos}" var="banco">
46:                 <option value="${banco.IdBanco}">${banco.NOME_BANCO}</option> 
47:             </c:forEach>
48:         </option>
49:     </select>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1257)
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1037)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
root cause

javax.el.PropertyNotFoundException: Property 'IdBanco' not found on type TablesBeans.Bancos
    javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:229)
    javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:206)
    javax.el.BeanELResolver.property(BeanELResolver.java:317)
    javax.el.BeanELResolver.getValue(BeanELResolver.java:85)
    org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
    org.apache.el.parser.AstValue.getValue(AstValue.java:183)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
    org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:1026)
    org.apache.jsp.WEB_002dINF.views.home_jsp._jspx_meth_c_005fforEach_005f0(home_jsp.java:187)
    org.apache.jsp.WEB_002dINF.views.home_jsp._jspService(home_jsp.java:134)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1257)
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1037)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)

Show demais!! Bom dia man!! Desculpa a demora em responder.

Vamos lá, pelo log temos essa mensagem que é a possível causa:

javax.el.PropertyNotFoundException: Property 'IdBanco' not found on type TablesBeans.Bancos
    javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:229)

Me mostra como está o objeto Bancos do pacote TableBeans. Ao que parece esse atributo IdBanco não existe no objeto Bancos.

Bom dia ! Thiago.. tudo blz ? Sera que deve ser por causa do SetIdBancos ? Quando criei ele pediu pra fazer um cast para int e mudar para long.

package TablesBeans;

public class Bancos {

    private int IdBanco;
    private String NomeBanco;

    public int getIdBanco() {
        return IdBanco;
    }
    public void setIdBanco(long l) {
        IdBanco = (int) l;
    }
    public String getNomeBanco() {
        return NomeBanco;
    }
    public void setNomeBanco(String nomeBanco) {
        NomeBanco = nomeBanco;
    }


}
solução!

O parâmetro do setIdBanco não poderia ser um INT?

Thiago, muito Obrigado pela ajuda e paciencia, fiz os ajustes na tabela e funcionou perfeitamente... muito show !!! TMJ.. abs.