selectOneMenu duvida

6 respostas
B

Prezados…
faz varios dias já que estou tentando retornar o valor do meu selectmenu selecionado mas não consigo… ja segui todos os exemplos do Guj que fala a respeito mas não vai de jeito nenhum. Ja fiz inclusive o exemplo do http://www.rponte.com.br/ mas não vai de jeito algum.

Vou postar meus codigos e ficarei grato se me ajudarem a encontrar onde é minha falha.

[/quote]
package controle;

import java.util.ArrayList;

import java.util.List;

import javax.faces.component.UIData;

import javax.faces.event.ValueChangeEvent;

import javax.faces.model.SelectItem;
import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.Transaction;

import entidades.Aluno;

import util.HibernateUtil;
import util.SessionUtil;

public class AlunoBean {

private Aluno aluno = new Aluno();

private List<Aluno> lista = new ArrayList<Aluno>();

private SelectItem selecionado;
public String escreveSelecionado(){
	System.out.println(this.getSelecionado());
	return "";

}
public SelectItem getSelecionado() {
	return selecionado;
}


public void setSelecionado(SelectItem selecionado) {
	this.selecionado = selecionado;
}


public List&lt;SelectItem&gt; getListaCombo() {
	        ArrayList&lt;SelectItem&gt; lista = new ArrayList&lt;SelectItem&gt;();
	        List&lt;Aluno&gt; resultado = listaTodosAlunos();
	        
	        for (Aluno  teste : resultado) {
		            SelectItem item = new SelectItem(teste.getId(), teste.getNome());
		            lista.add(item);
		        }
		        return lista;
		    } 



public List&lt;Aluno&gt; getLista() {
	if (desc.equals("")) {
		lista = listaTodosAlunos();
		return lista;
	} else {
		return lista;
	}
}

public void setLista(List&lt;Aluno&gt; lista) {
	this.lista = lista;
}

public Aluno getAluno() {
	return aluno;
}

public void setAluno(Aluno aluno) {
	this.aluno = aluno;
}

}
[/quote]

[/quote]
package entidades;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;
@Entity

public class Aluno {

@Id

@GeneratedValue

private int id;

private String nome;

private int idade;
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public int getIdade() {
	return idade;
}
public void setIdade(int idade) {
	this.idade = idade;
}

}
[/quote]

O erro gerado no console quando tento pegar o valor selecionado no combo é:
Feb 19, 2011 4:06:32 PM com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=j_id_jsp_1785323535_1:j_id_jsp_1785323535_4[severity=(ERROR 2), summary=(Conversion Error setting value ‘’ for ‘null Converter’. ), detail=(Conversion Error setting value ‘’ for ‘null Converter’. )]

6 Respostas

R

Faça desse jeito:

Classe Aluno:

public class Aluno{
Long id;

AlunoBean:

public class AlunoBean { 
private Aluno aluno = new Aluno(); 
private List&lt;Aluno&gt; lista = new ArrayList&lt;Aluno&gt;(); 
private Long selecionado;
B

Valeu…

Depois de tanto tempo perdido da até raiva ver que era isso… mas é isso ai…

Mais uma vez, obrigado :slight_smile:

R

Entendeu o motivo? :smiley:

B

Prezado raf4ever,

Eu vi que mudou de int pra Long, mas sou sincero pra dizer que o por quê ainda não descobri.

abraço

R

betocamargo:
Prezado raf4ever,

Eu vi que mudou de int pra Long, mas sou sincero pra dizer que o por quê ainda não descobri.

abraço

A mudança de int para Long é apenas uma boa prática e não impactou na solução.
A explicação é a seguinte:
Quando vc tem um List<SelectItem>,é obrigatório que o valor escolhido no <h:selectOneMenu> seja do mesmo tipo do List.

Portanto,se eu tenho:

List&lt;SelectItem&gt; lista = new SelectItem(new Long(1), teste.getNome());

O primeiro argumento do SelectItem indica o tipo de dado que deve ser recuperado,no caso será um Long.

Portanto,para recuperar na view deve estar da seguinte forma:
<h:selectOneMenu value="#{bean.selecionado}">

Onde ‘selecionado’ é um atributo do tipo Long;

Ficou mais claro agora?

B

Raf4ever… show, entendi

Valeu pela explicação.
:lol:

Criado 19 de fevereiro de 2011
Ultima resposta 19 de fev. de 2011
Respostas 6
Participantes 2