JSF - selectOneMenu

7 respostas
J

Estou com um problema no return do getAsObject do converter do SelectOneMenu, tenho um relacionamento entre duas tabelas no meu projeto de teste, tabelas tipoTelefoneTAB e telefoneTAB onde tipoTelefone pertence a um ou mais telefone e um telefone é pertencente a somente um tipo.

Tenho a tela de cadastro do tipoTelefone e quando vou cadastrar um telefone escolho um tipo listado no selectOneMenu que esta na tela telefone,então, agora o problema! quando vou salvo o return era para ser um apontamento do tipoTelefone na tabela telefone mas da erro de “o valor não é válido” como posso fazer este converter.

Muito obrigado pela ajuda.

Converter

@FacesConverter(forClass=tipoTelefoneTAB.class, value=“converterTipoTel”)
public class converterTipoTel implements Converter{

@Override
public Object getAsObject(FacesContext ctx, UIComponent component, String valueObject) {
	System.out.println("valueObject teste 10: "+valueObject);
	
	if(valueObject !=""){			
		tipoTelefoneBEAN bean = new tipoTelefoneBEAN();
		tipoTelefoneDAO dao = new tipoTelefoneDAO();
		/*USANDO O VALUEoBJECT PARA FAZER UMA BUSCA NO BANCO E TRAZER O ID PARA PODER CONVERTER PARA NO PEGARID PARA POSIÇÃO NA TABELA*/
		return dao.pegarID(bean.getSelectOneMenu(valueObject).getRowData().getIdTipoTelefone()); 
	}else{
		System.out.println("else 1 ''");
		return null;
	}
	
}

@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object valueString) {
	if(valueString !=""){
		System.out.println("valueString: "+valueString);
		tipoTelefoneTAB tab = (tipoTelefoneTAB) valueString;
		return tab.getTipoTelefone();
	}else{
		System.out.println("else 1 ''");
		return null;
	}
}

7 Respostas

Krismorte

Posta a classe inteira e não so os metodos

lucciano01

verifique se os métodos equals e hashcode estão implementados nas entidades, verifique também como está definido o id das entidades se Wrapper Long ou tipo primitivo long, pois o retorno do método espera um object

J
Boa tarde lucciano, os métodos hashcode e equals estão implementados, os ids sao int e autoGenerete, a minha variável que irá receber do JSF é to tipo: tipoTelefoneTAB

telefoneTAB (recebe do JSF)

@ManyToOne

@JoinColumn(name=idTipoTel)

private tipoTelefoneTAB idTipoTel;
public tipoTelefoneTAB getIdTipoTel() {
	return idTipoTel;
}
public void setIdTipoTel(tipoTelefoneTAB idTipoTel) {
	this.idTipoTel = idTipoTel ;
}
J

isto é tudo o que tenho na classe converter, não implementei nada a mais disso. tenho que implementar algo mais?

lucciano01

se os id´s estão int troque-os por Integer

J

troquei os id’s para Integer mas continuar o erro:

“Informações: AVISO: FacesMessage(s) foram enfileirados, mas podem n�o ter sido exibidos.
sourceId=j_idt5:tipoTels[severity=(ERROR 2), summary=(j_idt5:tipoTels: Erro de valida��o: o valor n�o � v�lido), detail=(j_idt5:tipoTels: Erro de valida��o: o valor n�o � v�lido)]”

a variável tem que receber do tipoTelefoneTAB fiz assim no return um CAST mas o erro persiste:
(tipoTelefoneTAB)dao.pegarID(bean.getSelectOneMenu(valueObject).getRowData().getIdTipoTelefone())

com o cast ele retorna assim VIA PRINTLN (DB.tipoTelefoneTAB@61a699e3) e sem o cast ele retorna assim (DB.tipoTelefoneTAB@90a34bbb)

e já consegui salvar no banco via SET setando direto sem usar o selectOneMenu e consegui salvar fazendo CAST no id do tipoTelefoneTAB

lucciano01

`por convençao utilize a primeira letra maiúscula ao definir um objeto TipoTelefoneBean
tente isso:

<a class="mention" href="/u/override">@Override</a>

public Object getAsObject(FacesContext context, UIComponent component, String value) {

TipoTelefoneBean tb = new TipoTelefoneBean();

if (value != null) {

TipoTelefoneDAO dao = new TipoTelefoneDAO ();
Long id = Long.valueOf(value);
             tb = dao.BuscaTelefoneBeanPeloId( id );
       
    }
    return tb;

// talvez peça um tratamento de exceção
`

Criado 15 de março de 2016
Ultima resposta 16 de mar. de 2016
Respostas 7
Participantes 3