Problema com selectOntMenu no JSF[RESOLVIDO]

9 respostas
brunorota

Boa noite galera

Tudo bom?

Estou com um problema em usar o SelectOneMenu.

Ele é preenchido corretamente, porém quando eu tento capturar a seleção acontece o seguinte erro

Conversion Error setting value 'br.com.rotasoftware.rotamtr.entities.Estado@3bc1585c' for 'null Converter'.

Segue abaixo meu código:

<h:selectOneMenu id="comboEstado" value="#{clienteMB.estadoSelect}">
	    							<f:selectItems value="#{clienteMB.estados}" 
	    							var="estado"
	    							itemValue="#{estado}"
	    							itemLabel="#{estado.sigla}"/>
	    						</h:selectOneMenu>

clienteMB

private List<Estado> estados;
        private Estado estadoSelect;

Qual é o erro?

Att.

9 Respostas

brunorota

Eu não consigo capturar objetos do selectOneMenu, eu apenas consegui capturar um atributo, ex um int.

Não tem alguma forma de eu capturar o objeto completo em vez de só o ID dele?

T

Cara voce precisa de um Converter.

no proprio componente ‘h:selectOneMenu’ voce pode ver que existe uma tag ‘converter’

O codigo propriamente dito do converter eu nao tenho,
Mas da uma olhada no google, no primeiro link voce ja acha o codigo necessario…

Flw

brunorota

Então eu não achei até agora

o meu converter parcial está assim

@FacesConverter(value="estadoConverter")
public class EstadoConverter implements Converter{
	
	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
		
		Estado e = new Estado();
		e.setSigla(arg2);
					
		return e;
	}

	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
		
		Estado e = new Estado();
		e = (Estado) arg2;
		
		return e.getSigla();
	}

	
}

Não sei como implementar o getAsObject =/

To enrolado aqui hehe

R

Bruno,

dá uma olhada nesses links:
http://www.rponte.com.br/2008/07/26/entity-converters-pra-da-e-vender/
http://www.rponte.com.br/2008/02/01/selectonemenu-converter-erro-de-validacao/

Flavio_Almeida

Sugiro o seguinte Link:

http://www.guj.com.br/java/220692-para-voce-entityconverter-para-qualquer-entidade-e-tipo-de-id

brunorota

Opa Rafael, realmente eu não tinha implementado o equals e hashCode, mais eu jurava que tinha, passei por cima hehehe.

Apesar de eu não saber essa regrinha do converter, muito obrigado, ótimo post em seu blog.

Assim que eu chegar em casa vou testar.

E Flavio, muito bacana o seu converter genérico, vou testar em casa tbm.

Assim que eu testar eu altero o tópico pra resolvido hehe

Obrigado a todos

Até +

R

brunorota:
Opa Rafael, realmente eu não tinha implementado o equals e hashCode, mais eu jurava que tinha, passei por cima hehehe.

Apesar de eu não saber essa regrinha do converter, muito obrigado, ótimo post em seu blog.

Assim que eu chegar em casa vou testar.

E Flavio, muito bacana o seu converter genérico, vou testar em casa tbm.

Assim que eu testar eu altero o tópico pra resolvido hehe

Obrigado a todos

Até +

Só retificando que o blog n é meu :smiley:

brunorota

Ops, mals, achei q fosse

Mais ótimo indicação, está mto bem explicado.

Valeww

brunorota

Opa funcionou o converter =D

valewww

Aproveitando, eu estou tendo dificuldade pra realizara a seguinte operação, eu quero que um método é executado quando eu seleciono um item no combo, porém está dando erro

<h:selectOneMenu id="combo-estado" value="#{clienteMB.estadoSelect}"
	    								converter="estadoConverter"
	    								onchange="#{clienteMB.atualizaCidades}"
	    								>
	    								<f:selectItems value="#{clienteMB.estados}" 
	    							 		var="estado"  
                   					 		itemLabel="#{estado.nome}"  
                   				     		itemValue="#{estado}" />
	    							</h:selectOneMenu>

Meu ClienteMB

public void atualizaCidades(){
		
		System.out.println("É EXECUTADO");
	}

A exceção

javax.servlet.ServletException: /pages/cadastro-cliente.xhtml @42,15 onchange="#{clienteMB.atualizaCidades}": The class 'br.com.rotasoftware.rotamtr.managedbeans.ClienteMB' does not have the property 'atualizaCidades'.
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)

Eu vi alguns exemplos usando o a4j, com o reRendered, porém o meu a4j não tem suporte a tag <a4j:support

Tem algum outra forma de eu selecionar um item no combo e de acordo com o item seleciona eu atualizar outro componente, outro combo por ex.

Valeww>

Criado 13 de setembro de 2011
Ultima resposta 14 de set. de 2011
Respostas 9
Participantes 4