[RESOLVIDO] Obter Recurso EJB 3.1 em Converter JSF
7 respostas
Fernando_Mateus
Pessoal, bom dia.
Estou querendo obter a instancia de um Session Bean em um Converter do Jsf, mas estou tendo problemas quanto a isso.
A princípio estava utilizando o annotation @EJB para buscar essa instância(não funcionou), depois vi que tinha que obter esse recurso através de um lookup.
Olhei alguns exemplos e ainda assim não estou conseguindo a instância. Segue abaixo o código. Alguém pode ajudar?
@FacesConverter(forClass=Estado.class,value="estadoConverter")publicclassEstadoConverterimplementsConverter{privateEstadoRepositorygetSession(){try{return(EstadoRepository)newInitialContext().lookup("EstadoRepository");}catch(Exceptionex){ex.printStackTrace();thrownewSisCgException("Não foi possível obter o lookup de EstadoRepository para EstadoConverter");}}
Cara, acredito que agora o problema está ou no converter ou na maneira que estou passando meu objeto. Pois estou obtendo o seguinte erro:
Alguém pode ajudar a identificar o erro? Sei que o hibernate chega a realizar a consulta e também traz registros.
java.lang.ClassCastException: java.lang.String cannot be cast to br.com.pactotecnologia.entity.Estado
esse erro está estourando quando entra na 1ª linha do método getAsString declarado conforme a seguir:
@FacesConverter(forClass=Estado.class,value="estadoConverter")publicclassEstadoConverterimplementsConverter{privateEstadoRepositorygetSession(){try{EstadoRepositoryestadoRepository=(EstadoRepository)initialContext.lookup("java:comp/env/ejb/EstadoRepository");returnestadoRepository;}catch(Exceptionex){ex.printStackTrace();thrownewSisCgException("Não foi possível obter o lookup de EstadoRepository para EstadoConverter");}}@OverridepublicObjectgetAsObject(FacesContextcontext,UIComponentcomponent,Stringid){if(id!=null&&!id.equals("")){try{EstadoestadoRetorno=this.getSession().pesquisaPorId(Long.parseLong(id));returnestadoRetorno;}catch(NumberFormatExceptione){returnnull;}}returnnull;}@OverridepublicStringgetAsString(FacesContextcontext,UIComponentcomponent,Objectvalue){Estadoestado=(Estado)value;returnestado.getId()+"";}}
Era sim, estava fazer validações de valores null no converter. Só que agora não estou conseguindo salvar meu objeto final. Na hora do submit com o botão salvar, apenas um dos valores do selectOneMenu da o seguinte erro somente na tela: Cidade: Erro de validação: o valor não é válidoCidade: Erro de validação: o valor não é válido. Tendo em vista que faço o mesmo com o selectOneMenu de Estado e não ocorre o erro.
Fui debugar o converter do dois e o método getAsObject é chamado três vezes onde, a primeira vem com o id do obejto, a segunda e a terceira vem uma String vazia.
Ta difícil encontrar o erro desses combos.