Como popular uma combobox em jsp

Olá,

sou iniciante em java e estou com dúvida sobre como popular uma combobox em jsp utilizando banco de dados postgres.
Tenho as seguintes tabelas com seus respectivos atributos:

Linha

id
descricao

Grupo

id
descricao
idLinha (advindo da tabela linha)

preciso colocar uma combo no cadastro do grupo trazendo os dados da tabela linha.

Grato

Primeiramente crie uma list de Objetos Linha

Depois que vc tiver a list de objetos linha devidamente populados com o conteúdo do banco,
é só vc popular o combobox utilizando um laço, um exemplo com foreach:

out.println("<select name=\"linha\" id=\"linha\">");
		for (Linha dadosLinha : suaListAqui) {
			out.println("<option value=\"" + dadosLinha.getLinhaId()+ "\" >" + dadosLinha.getLinhaDescricao() + "</option>");
		}
out.println("</select>");

Evite montar html em classes, use a taglib JSTL com a tag forEach para isso, onde vc passa uma lista por request:

request.setAttribute("artilheiros",new BolaoDAO().getArtilheiros());
<select name="pergunta1" class="frmCmb1">
    <option value="">..</option>
    <c:forEach var="artilheiros" items="${artilheiros}">
        <option value="${artilheiros.codigoArtilheiro}">
            ${artilheiros.nomeArtilheiro}
        </option>
     </c:forEach>
</select>

Olá

Eu faço da seguinte maneira:

…java bean

public class Linha {
   private String id
   private String desc

///getter setter

…LinhasDao

public List<Linha> retrieveAllLinhas(){
 List<Linha> linhas = new ArrayList<Linha>();
 String query = select * from linhas;
  //bla bla bla
  while(rs.next){
     Linhas l = new Linha();
     l.setId(rs.getString(1));
     l.setDescricao(rs.getString(2));
     linhas.add(l);
  }
  return linhas;
}

…no Servlet

List linhasList = retrieveAllLinhas(); 
session.setAttribute("linhasSession", linhasList);
//mando pra jso

… na JSP.

<%
  List linhas = (List)session.getAttribute("linhasSession");
  for(int i = 0; i < linhas.size(); i++) {
     Linha linhaLocal = linhas.get(i);
 %>
       <select name="linhas">

			<option value=<%=linhaLocal.getId()%>> <%=linhaLocal.getDescricao();%> </option>																</select>
 <% } //fecha for
%>

Qualquer duvida post ae …

Espero ter ajudado …

Abraços

1 curtida

Apenas uma correção no exemplo do gui_sv

<%
  List linhas = (List)session.getAttribute("linhasSession");
  for(int i = 0; i < linhas.size(); i++) {
     Linha linhaLocal = linhas.get(i);
 %>
       <select name="linhas">

			<option value=<%=linhaLocal.getId()%>> <%=linhaLocal.getDescricao();%> </option>																</select>
 <% } //fecha for
%>

Dessa maneira vão se repetir inúmeros combo box, o laço seria apenas para as options
portanto ficaria:

 <select name="linhas">
<%
  List linhas = (List)session.getAttribute("linhasSession");
  for(int i = 0; i < linhas.size(); i++) {
     Linha linhaLocal = linhas.get(i);
 %>
      

			<option value=<%=linhaLocal.getId()%>> <%=linhaLocal.getDescricao();%> </option>																
 <% } //fecha for
%>
</select>

Mais o restante está ok, bem completo o exemplo

hehehhe

É verdade … obrigado pela correção Gbzao !!!

nem tinha me atendado a isto …

obrigado por elogiar o post

abraços

Obrigado rapazida, principalmente ao Gui_Sv, por descrever nos mínimos detalhes (do jeito que eu precisava, hehehe)…

Abraço e fiquem com Deus

opa …

vlw

Ola! sou iniciante em Java e em foruns, desde já venho pedir desculpas se postar alguma pergunta que pareça tola.

Preciso popular um combobox só que não estou usando Servlet to fazendo apenas com uma bean, uma classe DAO e um jsp. Me baseei no exemplo do gui_sv só que não quero usar o Servlet, como eu devo fazer? meu código esta lançando um erro. Segue o que eu fiz.

-----------------um método na classe DAO com o intuito de fazer o select no banco e guardar em uma lista.

public List exibir() {
List listaFaculdade = new ArrayList();
String sql = “select * from faculdade”;
Statement st;
try {
st = com.createStatement();
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
FaculdadeBean faculdade = new FaculdadeBean();
faculdade.setCod_faculdade(rs.getInt(1));
faculdade.setNome(rs.getString(2));
listaFaculdade.add(faculdade);
}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	return listaFaculdade;
}

no JSP fiz isso

<% FaculdadeDAO f = new FaculdadeDAO(); List linhasList = f.exibir(); for (int i = 0; i < linhasList.size(); i++) { FaculdadeBean faculdade = linhasList.get(i); %> ><%=faculdade.getNome()%> <% } %>

-----------------Quando vou rodar o apache da o seguinte erro:

exception

org.apache.jasper.JasperException: Exception in JSP: /cadastrarCurso.jsp:76

73:


74: <%
75: FaculdadeDAO f = new FaculdadeDAO();
76: List linhasList = f.exibir();
77: for (int i = 0; i < linhasList.size(); i++) {
78: FaculdadeBean faculdade = linhasList.get(i);
79: %>

Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

java.lang.NullPointerException
paconeDAO.FaculdadeDAO.exibir(FaculdadeDAO.java:47)
org.apache.jsp.cadastrarCurso_jsp._jspService(cadastrarCurso_jsp.java:135)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.26 logs.

-----------O que eu to fazendo de errado?

Gui_sv usei o seu método de se listar mas os valores não estão aparecendo, o que devo fazer ?

Bom…tudo é mais facil se vc utilizar as ferramentas que te da um apoio.

  • Primeiro aconselho voce utilizar o Hibernate e fazer a conexao.
  • Segundo criar a lista de objeto que voce quer colocar no drop.
  • Terceiro vamos jogar no jsp.

conexao hibernate. (pesquise qual é os dados do postgres)

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

	<session-factory>

		<property name="hibernate.cglib.use_reflection_optimizer">
			true
		</property>

		<property name="hibernate.connection.driver_class">
			com.mysql.jdbc.Driver
		</property>

	 
		<property name="hibernate.connection.password">
			root
		</property>

		<property name="hibernate.connection.url">
			jdbc:mysql://localhost/decom
		</property>

		<property name="hibernate.connection.username">
			root
		</property>

		<property name="hibernate.default_schema">
			nomeSchema
		</property>

		<property name="hibernate.dialect">
			org.hibernate.dialect.MySQLInnoDBDialect
		</property>

		<property name="hibernate.show_sql">
			false
		</property>

		<property name="hibernate.format_sql">
			true
		</property>

		<mapping class="br.com.Decom.xxx.Estado" />

 
	</session-factory>

</hibernate-configuration>

classe DAO generica

package br.com.XXXXXX.DAO;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

import br.com.Decom.Util.HibernateUtil;

public class DAO<T> {

	private static Logger logger = Logger.getLogger(DAO.class);

	private Class<T> persistentClass;

	private Session session = HibernateUtil.getSession();

	public DAO(Class<T> persistentClass) {

		this.persistentClass = persistentClass;

	}

	@SuppressWarnings("unchecked")
	public T busca(Long id) {

		session.beginTransaction().begin();

		Criteria c = session.createCriteria(persistentClass);
		c.add(Restrictions.eq("id", id));
		c.add(Restrictions.eq("status", true));
		T objeto = (T) c.uniqueResult();

		// objeto = (T) session.load(persistentClass, id);
		logger.info("LendoGenerico " + persistentClass + " com id " + id);
		session.beginTransaction().commit();
		return objeto;
	}

	@SuppressWarnings("unchecked")
	public T busca(int id) {

		session.beginTransaction().begin();

		Criteria c = session.createCriteria(persistentClass);
		c.add(Restrictions.eq("id", id));
		c.add(Restrictions.eq("status", true));
		T objeto = (T) c.uniqueResult();

		// objeto = (T) session.load(persistentClass, id);
		logger.info("LendoGenerico " + persistentClass + " com id " + id);
		session.beginTransaction().commit();
		return objeto;
	}

	@SuppressWarnings("unchecked")
	public T busca(String idString) {

		session.beginTransaction().begin();
		Long id = Long.parseLong(idString);
		Criteria c = session.createCriteria(persistentClass);
		c.add(Restrictions.eq("id", id));
		c.add(Restrictions.eq("status", true));
		T objeto = (T) c.uniqueResult();

		// objeto = (T) session.load(persistentClass, id);
		logger.info("LendoGenerico " + persistentClass + " com id " + id);
		session.beginTransaction().commit();
		return objeto;
	}

	@SuppressWarnings("unchecked")
	public T buscaGenericaId(String coluna, Long id) {

		session.beginTransaction().begin();
		Criteria c = session.createCriteria(persistentClass);
		c.add(Restrictions.eq(coluna, id));
		c.add(Restrictions.eq("status", true));
		T objeto = (T) c.uniqueResult();

		// objeto = (T) session.load(persistentClass, id);
		logger.info("LendoGenerico " + persistentClass + " com id " + id);
		session.beginTransaction().commit();
		return objeto;
	}

	@SuppressWarnings("unchecked")
	public List<T> buscaGenerica(String coluna, String nome) {

		session.beginTransaction().begin();
		Criteria c = session.createCriteria(persistentClass);
		c.add(Restrictions.ilike(coluna, nome, MatchMode.ANYWHERE));
		c.add(Restrictions.eq("status", true));

		session.beginTransaction().commit();
		return c.list();
	}

	@SuppressWarnings("unchecked")
	public List<T> buscaGenerica(String coluna, Long numero) {

		session.beginTransaction().begin();
		Criteria c = session.createCriteria(persistentClass);

		c.add(Restrictions.eq(coluna, numero));

		c.add(Restrictions.eq("status", true));

		session.beginTransaction().commit();
		return c.list();

	}

	@SuppressWarnings("unchecked")
	public List<T> buscaGenerica(String coluna, int numero) {

		session.beginTransaction().begin();
		Criteria c = session.createCriteria(persistentClass);

		c.add(Restrictions.eq(coluna, numero));

		c.add(Restrictions.eq("status", true));

		session.beginTransaction().commit();
		return c.list();

	}

	@SuppressWarnings("unchecked")
	public List<T> buscaGenerica(String coluna, String nome, String coluna2,
			String nome2) {

		session.beginTransaction().begin();

		Criteria c = session.createCriteria(persistentClass);
		c.add(Restrictions.ilike(coluna, nome, MatchMode.ANYWHERE));
		c.add(Restrictions.ilike(coluna2, nome2, MatchMode.ANYWHERE));
		c.add(Restrictions.eq("status", true));

		session.beginTransaction().commit();
		return c.list();
	}

	@SuppressWarnings("unchecked")
	public List<T> buscaLogin(String coluna, String nome, String coluna2,
			String nome2) {

		session.beginTransaction().begin();

		Criteria c = session.createCriteria(persistentClass);
		c.add(Restrictions.eq(coluna, nome));
		c.add(Restrictions.eq(coluna2, nome2));
		c.add(Restrictions.eq("status", true));

		session.beginTransaction().commit();
		return c.list();
	}

	@SuppressWarnings("unchecked")
	public List<T> buscaGenerica(String coluna, Long idColuna, String coluna2,
			Long idColuna2) {

		session.beginTransaction().begin();

		Criteria c = session.createCriteria(persistentClass);

		c.add(Restrictions.eq(coluna, idColuna));
		c.add(Restrictions.eq(coluna2, idColuna2));

		c.add(Restrictions.eq("status", true));

		session.beginTransaction().commit();
		return c.list();
	}

	@SuppressWarnings("unchecked")
	public List<T> buscaLista() {

		session.beginTransaction().begin();
		Criteria c = session.createCriteria(persistentClass);
		c.add(Restrictions.eq("status", true));
		List<T> lista = c.list();

		// session.beginTransaction().begin();
		// logger.info("ListandoTodosGenerico " + persistentClass );
		// List<T> lista = session.createCriteria(persistentClass).list();
		session.beginTransaction().commit();
		return lista;
	}

	public void salva(T t) {
		session.beginTransaction().begin();
		logger.info("SalvandoGenerico " + t);
		session.save(t);
		session.beginTransaction().commit();

	}

	public void atualiza(T t) {
		session.beginTransaction().begin();
		logger.info("AtualizandoGenerico " + t);
		session.update(t);
		session.beginTransaction().commit();
	}

	public void merge(T t) {

		logger.info("Salvando ou atualizando" + t);
		session.merge(t);
	}

	public void deleta(T t) {
		session.beginTransaction().begin();
		logger.info("DeletandoGenerico do id = " + t);
		session.update(t);
		session.beginTransaction().commit();
	}
	
 
	/*
	 * Codigo para deletar realmente do Banco public void remove(T t){
	 * session.beginTransaction().begin();
	 * logger.info("DeletandoGenerico do id = " + t); session.delete(t);
	 * session.beginTransaction().commit(); }
	 */

}

classe modelo

package br.com.XXXXX.Model;

// Generated 20/07/2011 15:01:15 by Hibernate Tools 3.1.0.beta4

import java.util.List;
 
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import org.hibernate.annotations.Type;
/**
 * Estado generated by hbm2java
 */
@Entity
public class Estado {

	// Fields
	@Id
	@GeneratedValue
	private Long id;

	
	private String nome;

	
	private String sigla;

	@Type(type = "true_false")
	private boolean status;
 
	@OneToMany(mappedBy = "estado", fetch = FetchType.LAZY)
	// @Where(clause = "status='T'")
	private List<Cidade> cidades;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSigla() {
		return sigla;
	}

	public void setSigla(String sigla) {
		this.sigla = sigla;
	}
 	public boolean isStatus() {
		return status;
	}

	public void setStatus(boolean status) {
		this.status = status;
	}
	
 
	public List<Cidade> getCidades() {
		return cidades;
	}

	public void setCidades(List<Cidade> cidades) {
		this.cidades = cidades;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result + ((sigla == null) ? 0 : sigla.hashCode());
		result = prime * result + (status ? 1231 : 1237);
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Estado other = (Estado) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (sigla == null) {
			if (other.sigla != null)
				return false;
		} else if (!sigla.equals(other.sigla))
			return false;
		if (status != other.status)
			return false;
		return true;
	}

	@Override
	public String toString() {
		return  nome;
	}
	 
	
}

manager beam(essa vai fazer interação direta com a tela)

package br.com.XXXXX.ManergerBeam;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.XXXXX.DAO.DAO;
import br.com.XXXX.Model.Estado;

@ManagedBean
@ViewScoped
public class mbEstado {

	static DAO<Estado> daoEstado = new DAO<Estado>(Estado.class);
	List<Estado> listaEstado;
	private Estado estado = new Estado();
	private Estado estadoNovo = new Estado();
	private Estado estadoSelecionado = new Estado();

	public mbEstado() {
		// TODO Auto-generated constructor stub
		attLista();
	}

	public String Salvar() {

		estado.setStatus(true);
		daoEstado.salva(estado);
		listaEstado.add(estado);
		daoEstado = new DAO<Estado>(Estado.class);
		estado = new Estado();
		attLista();
		return "ok";
	}

	public String Editar() {
 
			daoEstado.atualiza(estado);
			estado = new Estado();
			daoEstado = new DAO<Estado>(Estado.class);
			listaEstado = new ArrayList<Estado>();
			listaEstado = daoEstado.buscaLista();
			// attLista();
		 
		return "ok";
	}

	public String Deletar() {
		atualizaCampos();
		estado.setStatus(false);
		daoEstado.salva(estado);
		daoEstado = new DAO<Estado>(Estado.class);
		estado = new Estado();
		attLista();
		return "ok";
	}

	public String atualizaCampos() {
		estado = estadoSelecionado;
		return "ok";
	}

	public void setListaEstado(List<Estado> listaEstado) {
		this.listaEstado = listaEstado;
	}

	public List<Estado> getListaEstado() {
		attLista();
		return listaEstado;
	}

	public static Estado buscaEstado(Long idEstado) {
		Estado estado = daoEstado.busca(idEstado);
		return estado;
	}

	public static Estado buscaEstado(String idEstado) {
		Estado estado = daoEstado.busca(idEstado);
		return estado;
	}

	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	public String attLista() {
		listaEstado = daoEstado.buscaLista();
		return "ok";
	}

	public Estado getEstadoSelecionado() {
		return estadoSelecionado;
	}

	public void setEstadoSelecionado(Estado estadoSelecionado) {
		this.estadoSelecionado = estadoSelecionado;
	}

	public Estado getEstadoNovo() {
		return estadoNovo;
	}

	public void setEstadoNovo(Estado estadoNovo) {
		this.estadoNovo = estadoNovo;
	}

}

pagina web em xhtml utilizando jsf2.0 (cadastra cidade)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="pt-br" xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui"
	xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head>

</h:head>	

<h:body>
	<div id="Conteudo">
		<h:panelGrid>
			<h:column> 

					<p:fieldset legend="Cidade">
						<h:panelGrid id="pgEstoqueCategoria" columns="2">

							<h:outputText value="Estado:"></h:outputText>
							<h:column>
								<p:selectOneMenu value="#{mbCidade.estado}" required="true" converter="cvEstado" 
                requiredMessage="Valor é obrigatório"   > 
									<f:selectItem itemLabel="--- Selecione ---" itemValue="0" />
									<f:selectItems id="listaOsEstados"  value="#{mbEstado.listaEstado}"  var="a" itemValue="#{a}" itemLabel="#{a.nome}" />
								</p:selectOneMenu>
							</h:column>
							<h:outputText value="Cidade:"></h:outputText>
							<h:inputText value="#{mbCidade.cidadeNova.nome}" />
							<h:column></h:column>
							<p:commandButton value="Salvar" ajax="false" action="#{mbCidade.Salvar}" />
						</h:panelGrid>
					</p:fieldset>
 				<!-- FIM FORM -->
			</h:column>
			<!-- FIM COLUNA GERAL -->
		</h:panelGrid>
		<!-- FIM PAINEL GERAL -->
	</div>
</h:body>
</html>

Conversor( Com isso voce passa o Objeto COMPLETO, e nao só o Id)

package br.com.Decom.Conversores;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

import br.com.Decom.DAO.DAO;
import br.com.Decom.Model.Estado;

@FacesConverter("cvEstado")
public class cvEstado implements Converter {

	
	DAO<Estado> dao = new DAO<Estado>(Estado.class);
	
	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
		try {
			
			return dao.busca(arg2);
		} catch (NumberFormatException e) {
			return new Estado();
		}
	}

	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
		try {
			return String.valueOf(((Estado) arg2).getId());
		} catch (Exception e) {
			return "";
		}
	}
}

pode parecer muita coisa… mais acredito q seguindo esses passos se for feito…o seu codigo fica organizado e facil de utilizar…