Conversor do inferno no JSF

Pessoal, faz dias que estou tentando aplicar um conversor personalizado para meu h:selectOneMenu mas não estou tendo sucesso e não consigo enchergar o erro !!!

Consiste em listar em um select com ids e labels de um objeto chamado Param e transformar o selecionado no objeto Param que é um atributo de meu managedBean. (resumindo, ler o item selecionado e retornar do converter um objeto com base no id)

Depurei o código ele passa por ele com sucesso, com “entidade” contendo o objeto recuperado do banco pelo hibernate.

Mas na pagina, é apresentado a mensagem:

Erro de validação “_idJsp17”: O valor não é uma opção válida.

COMO PODE SE ELE PASSA COM SUCESSO PELO CONVERSOR???

Por favor me deem uma mão que já to pirando com isso.

abraços

Na jsp esta assim:

<h:selectOneMenu value="#{usrEditarMB.param}"
converter=“br.com.siq.faces.conversor.IdToObject”>
<f:selectItems value="#{usrEditarMB.params}" />
</h:selectOneMenu>

no método getAsObject:

    public Object getAsObject(FacesContext context, UIComponent component,
            String newValue) {
       
        int posId = newValue.indexOf("id=");
        int posClass = newValue.indexOf("class=");

        Object entidade = null;
        try{
       
        if (posId != -1 && posClass != -1) {
            BigInteger id = new BigInteger(newValue.substring(posId + 3,posClass - 1));
            try {
                entidade = Class.forName(newValue.substring(posClass + 6)).newInstance();
            } catch (InstantiationException e) {
                   ... log de erro
            } catch (IllegalAccessException e) {
                   ... log de erro
            } catch (ClassNotFoundException e) {
                 ... log de erro
            }

            MasterDao masterDao = DaoFactory.getMasterDao(DaoFactory.HIBERNATE);
            masterDao.loadObj(id, entidade);
        }
        }catch (Exception e){
            ... log de erro
        }
        return entidade;
    }

WTF !

Alguém pode me ajudar?

eu até ia responder, mas ja que tu ta com pressa e acha que alguem tem que responder o teu post em menos de 30 minutos, então paga alguem pra te ajudar …

Que mal humor é este Urubatan?

Minha segunda pergunta foi por pensar que talvez alguém não tivesse passado por isso.

O fato é que já faz alguns dias que tento achar a solução pra esse problema e não consigo respostas. Procurei na web e o maximo que consegui foi alguns casos onde o desenvolvendor não tinha sobrescrito o método equals do model, mas nesse caso eu fiz isso, mas tbm não funcionou:

	public boolean equals(Object o) {
		if( this == o ) return true;
	    if( o == null ) return false;
	    if( !(o instanceof Param) ) return false;
	    Param that = (Param)o;
	    return idParam.equals( that.getIdParam()); 
	}

Se você poder me ajudar, estarei muito agredecido.
Desculpe se pareci arrogante.

[]s

PS: Fui eu que add o comentario do arquivo zip com erro (mas sem erro, hehe), de sua apresentação no webdev em seu blog (que descompactei com o gzip). O material me ajudou bastante. Valew

Olá,

Além do método equals vc tb implementou o toString no teu pojo???

Olá Toninho,

O toString eu não sobrescrevi não. Não sabia que a fase de validação utilizava este método do POJO.

Como que ficaria meu toString neste caso?

Obrigado

[]´s

Implementei agora o toString, mas tbm não foi:

public String toString() {
	return getIdParam.toString();
}

O interessante é que coloco breakPoint no toString e no equals do pojo, mas o fluxo não esta passando por eles.

O engraçado é que ele não da erro fo getAsObjetc(), inclusive retorna o objeto certinho do banco – (engraçado não, melhor dizer o desgraçado, argh!)

o que sera hein?!

[]s

Olha… como vc esta preenchendo a lista?

Cola o codigo java que faz isso aqui…

Tu tá usando Jdeveloper ?

pelo que tu fez mostrou até agora, parece que o problema esta no local onde tu colocou o converter.
tem que colocar ele é no <f:selectItems value="#{usrEditarMB.params}" />
e não no <h:selectOneMenu

pois é no selectItems que os itens tem que ser convertidos para SelectItem

isto se eu entendi direito o que tu ta querendo fazer :D>

Lezinho,

Eu to com o mesmo problema, como foi q tu resolvesse isso?

Humberto

… desculpe Humberto, só hoje vi sua mensagem. Eu usei o componente do Tomahawk t:saveState sobre minha lista de selectedItens e tudo funcionou.

[]s

Beleza lezinho?

Cara eu estou tendo um problema semelhante ao seu. Tem como voce postar o seu código pra eu ver como você fez?

Valeu!

acho que é este problema que estou tendo… tem relação com validador e conversor…
tá dando este erro:

sourceId=form1:cidade[severity=(ERROR 2), summary=(form1:cidade: Validation Error: Value is not valid), detail=(form1:cidade: Validation Error: Value is not valid)]

como foi resolvido?
eu descrevi meu problema neste tópico:
http://www.guj.com.br/posts/list/71208.java

Beleza galera?

Na verdade o meu erro é um pouco diferente. Na verdade só dá erro quando utilizo uma agregação por exemplo:

vo.outroVO.id

quando vou tentar setar a propriedade id com o combo dá erro de validação.

Se eu fizer

vo.id

ai funfa
Alguém tem alguma ideia? EStou usando o myfaces 1.1

O seu “outroVO” esta nulo em uma das fases do clico de vida. Então dá NullPointer e o conversor joga valor inválido.

Faça um log.info ou debug em trechos do seu código e veja se o problelma é realmente esse. Se for, o problema é o mesmo que eu tive e o saveState do tomahawk pode te ajudar.

Olá Lezinho,

Estou com este problema… no equals o objeto chega nulo… não sei porquê…
Se voce pudesse expor o codigo que voce fez, me ajudaria bastante…

Obriagdo

Como mencionei, apenas usei a tag t:saveState sobre o bean que estava fazendo a conversão:

http://myfaces.apache.org/tomahawk/uiSaveState.html

Alessandro vc poderia postar um exmplo da sua solucao?
Já sei qual a solucao para o problema, mas nao sei como usar essa tag savestate
Obrigada.
:wink: