[RESOLVIDO]selectOneMenu ligado diretamente com uma entity da erro de validação

8 respostas
rafaelbtz

Tinha usado um outro tópico pra colocar a minha quastão mas como finalizaram o outro estou criando este:

fiz um selectOneMenu ligado diretamente com uma Entity do Hibernate exemplo:

<h:selectOneMenu value="#{cadPessoaMB.registro.municipio}" id="cmbMunicipio">
	<f:selectItems value="#{cadPessoaMB.municipios}" var="m" itemValue="#{m.id}" itemLabel="#{m.nome}"/>
</h:selectOneMenu>

O value aponta para um objeto do tipo Municipio que é uma entity.

Então fiz um conversor:

@FacesConverter(forClass=Municipio.class)
public class MunicipioConverter  implements Converter {
	public Object getAsObject(FacesContext context, UIComponent component, String valor) {
		if(valor == null || valor.equals("null") || valor.length()==0)return null;
		return new MunicipioDao().findById(Long.valueOf(valor));
	}
 
	public String getAsString(FacesContext context, UIComponent component, Object object) {
		if(object == null)return null;
		return ((Municipio)object).getId().toString();
	}

}

Ja debuguei o conversor e ele passa certinho e também devolve o objeto correto no getAsObject.

Porém, quando eu dou o Submit no form, ele da um erro de validação. Eu preciso implementar um validator também?

8 Respostas

R

Qual a msg de erro?

rafaelbtz

Não é um erro na verdade, é falha na validação… é adicionado um Menssage no ciclo de validação dos valores da request… Como quando se digita ABC em um inputText que está ligado a um valor Integer.

Mas nesse caso as classes estão corretas e o conversor está voltando valor correto, isso que tá estranho. Se eu ligao por exemplo o ID com o ID do entity ai funciona, mas eu queria ligar o objeto completo.

Lucas_Sorrentino

Posta seu código do controller aonde você popula a combo também.

rafaelbtz
public List<Municipio> getMunicipios() {
		if(municipios == null) {
			if(registro.getUf() == null) {
				municipios = new ArrayList<Municipio>();
			}else {
				municipios = new MunicipioDao().findByUf(registro.getUf());	
			}
		}
		return municipios;
	}
Lucas_Sorrentino

Cara, você tem que criar uma lista de selectItens pra popular essa combo…

supondo que você já tenha uma lista de municipios

List<SelectItem> municipiosCombo = new ArrayList<SelectItem>();
		for (Municipio municipio : listaMunicipios) {
			SelectItem si = new SelectItem(municipio, municipio.getNome());
			municipiosCombo.add(si);
		}

E chamar essa lista de selectItens na sua JSP.

Espero ter ajudado.

Abraços

Lucas_Sorrentino

A JSP:

<h:selectOneMenu value="#{cadPessoaMB.registro.municipio}" id="cmbMunicipio" converter="municipioConverter">  
        <f:selectItems value="#{cadPessoaMB.municipiosCombo}"/>  
    </h:selectOneMenu>
rafaelbtz

Agora foi… valeu ajudou muito…

Lucas_Sorrentino

Sem problemas…
Só coloca [RESOLVIDO] no titúlo do post.

Abraços!

Criado 3 de fevereiro de 2011
Ultima resposta 3 de fev. de 2011
Respostas 8
Participantes 3