JSF - <h:selectOneMenu> - Erro ao listar

4 respostas
edysnipes

Bom dia amigos, utilizava o struts e agora quero aprender JSF e já me deparei com a primeira dúvida:

Como listar dados em um select:

Seguem abaixo a jsp e a classe!

cadastrarPedido.jsf

<h:selectOneMenu value="" required="true">
				<f:selectItem itemValue="" itemLabel="Selecione uma Quadra"/>
				<f:selectItems value="#{login.listaDeQuadras}"/>
			</h:selectOneMenu>

LoginAction

public class LoginAction {

	
	private Usuario usuario;
	private List<SelectItem> listaDeQuadras;
	
	private String nrIdentidade;
	private String deSenha;

	public String validarLogin() {
		UsuarioDAO usuarioDAO = new UsuarioDAO();
		QuadraDAO quadraDAO = new QuadraDAO();
		try {
			usuario = usuarioDAO.getInstance().consultarUsuario(nrIdentidade, deSenha);
			listaDeQuadras = quadraDAO.getInstance().listaDeQuadras();
			if(usuario != null) {
				return "sucesso";
			}
		} catch (Exception e) {
			e.printStackTrace();
		}	
		return "";
	}
	
	public Usuario getUsuario() {
		return usuario;
	}
	
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	public String getNrIdentidade() {
		return nrIdentidade;
	}
	
	public void setNrIdentidade(String nrIdentidade) {
		this.nrIdentidade = nrIdentidade;
	}

	public String getDeSenha() {
		return deSenha;
	}
	
	public void setDeSenha(String deSenha) {
		this.deSenha = deSenha;
	}

	public List<SelectItem> getListaDeQuadras() {
		return listaDeQuadras;
	}

	public void setListaDeQuadras(List<SelectItem> listaDeQuadras) {
		this.listaDeQuadras = listaDeQuadras;
	}
		
	
	
}

QuadraDAO

package br.mil.sisgped.dao;

import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

import org.hibernate.Query;
import org.hibernate.Session;

import br.mil.sisgped.bean.Quadra;
import br.mil.sisgped.util.HibernateUtil;

public class QuadraDAO {

	private static QuadraDAO quadraDAO;
	
	public static QuadraDAO getInstance(){
		if(quadraDAO == null) {
			quadraDAO = new QuadraDAO();
		}
		return quadraDAO;
	}
	
	public void cadastrarQuadra(Quadra quadra){
		Session sessao = HibernateUtil.getSession();
		sessao.beginTransaction();
		try {
			sessao.save(quadra);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public List<SelectItem> listaDeQuadras() {
		Session sessao = HibernateUtil.getSession();
		sessao.beginTransaction();
		List<SelectItem> listaDeQuadras = null;
		try {
			String sql = "from Quadra";
			Query query = sessao.createQuery(sql);
			listaDeQuadras = (List<SelectItem>) query.list();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return listaDeQuadras;
	}
}

Erro retornado:

java.lang.ClassCastException: br.mil.sisgped.bean.Quadra cannot be cast to javax.faces.model.SelectItem

Aguardo Ajuda"
Obrigado

4 Respostas

andretads

vc deve criar um método para a listagem no selec assim…

public List<SelectItem> getListaDeQuadras() {
List<SelectItem> itens = new ArrayList<SelectItem>;
for (Quadra quadra : quadraDAO.getInstance().listaDeQuadras()) {
itens.add(new SelectItem(quadra.getId, quadra.getDescricao)); // o primeiro parametro é o valor que vc passa para o mb e o segundo é o label que ficará na página jsp
}
return itens;
}

Não há a necessidade de popular essa lista de quadras dentro do método validarLogin, é só colocar esse método ai de cima no teu mb que funcionará.
Na verdade vc também não precisa criar o atribute listaDeQuadras no seu mb.
O erro ocorre porque sua classe DAO retorna um lista de objetos Quadra e não dá para fazer cast para uma lista de objetos selectItem.
Seu método do DAO pode retornar uma lista de objetos Quadra e não uma lista de selectItem, só vi isso agora, dessa forma o método que escrevi ai em cima funcionará

Espero ter ajudado.

edysnipes

Mas como ficaria a chamada na JSP? coloco assim:

<h:selectOneMenu value="" required="true">
<f:selectItem itemValue="" itemLabel="Selecione uma Quadra"/>
<f:selectItems value="#{login.getListaDeQuadras}"/>
</h:selectOneMenu>

assim deu erro:

org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: javax.faces.el.PropertyNotFoundException: Error getting property ‘getListaDeQuadras’ from bean of type br.mil.sisgped.action.LoginAction

andretads

não soh #{login.listaDeQuadras}

edysnipes

Velho Muito Obrigado!

Resolvido!

Criado 21 de agosto de 2008
Ultima resposta 21 de ago. de 2008
Respostas 4
Participantes 2