[RESOLVIDO] Tags JSF + SelectOneMenu erro de conversão
6 respostas
gmantovani2005
Olá,
Já vi muitos tópicos referente a erro de conversão utilizando a tag <h:selectonemenu />, mesmo assim não estou conseguindo utilizar esta tag.
O problema que estou tendo é de conversão.
Tenho uma classe Grupo e uma classe Empresa. Dentro de empresa eu tenho a referencia de Grupo.
Coloquei a tag selectonemenu para selecionar os grupos do banco de dados e gravar dentro de empresa.
O problema está que sempre aparece erro de conversão, já tentei de várias formas fazer isto.
O que estou vendo é que independente de como eu busco os dados, o sistema está sempre pegando o valor do toString() do objeto.
Gostaria de entender melhor como isto funciona, mas não estou conseguindo.
Alguém pode me ajudar?
Já usei vários exemplos na web e nenhum deles funcionou.
Descobri que o problema era no meu conversor para String. Resolvi o problema do value ser o ID e não o toString do Grupo apenas acertando meu conversor:
Mas agora estou com outro problema.
Quando seleciono o grupo e clico em salvar, o sistema apresenta esta mensagem:
j_idt11:grupo: Validation Error: Value is not valid
Não apresenta erro no console, então tentei debugar e a única coisa que consegui descobrir é que a primeira vez que ele passa pelo conversor de Object ele passa corretamente, mas ele passa mais duas vezes depois com valor vazio e não sei por que ele faz isto.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><ui:compositionxmlns="http://www.w3.org/1999/xhtml"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html"xmlns:c="http://java.sun.com/jsp/jstl/core"xmlns:rich="http://richfaces.org/rich"xmlns:a4j="http://richfaces.org/a4j"template="/WEB-INF/templates/default.xhtml"><f:metadata><f:viewParamname="id"value="#{empresaController.id}"/><f:eventtype="preRenderView"listener="#{empresaController.recupera}"/></f:metadata><ui:paramname="pageTitle"value="Nova Empresa"/><ui:definename="content"><h:form><h:panelGridcolumns="3"columnClasses="titleCell"><h:outputLabelfor="id"value="Id:"rendered="#{not empty empresa.id}"/><h:inputTextid="id"value="#{empresa.id}"rendered="#{not empty empresa.id}"disabled="true"/><h:messagefor="id"errorClass="invalid"rendered="#{not empty empresa.id}"/><h:outputLabelfor="nome"value="Nome:"/><h:inputTextid="nome"value="#{empresa.nome}"/><h:messagefor="nome"errorClass="invalid"/><h:outputLabelfor="apelido"value="Apelido:"/><h:inputTextid="apelido"value="#{empresa.apelido}"/><h:messagefor="apelido"errorClass="invalid"/><h:outputLabelfor="email"value="E-Mail:"/><h:inputTextid="email"value="#{empresa.email}"/><h:messagefor="email"errorClass="invalid"/><h:outputLabelfor="cnpj"value="Cnpj:"/><h:inputTextid="cnpj"value="#{empresa.cnpj}"/><h:messagefor="cnpj"errorClass="invalid"/><h:outputLabelfor="telefone"value="Telefone:"/><h:inputTextid="telefone"value="#{empresa.telefone}"/><h:messagefor="telefone"errorClass="invalid"/><h:outputLabelfor="celular"value="Celular:"/><h:inputTextid="celular"value="#{empresa.celular}"/><h:messagefor="celular"errorClass="invalid"/><h:outputLabelfor="responsavel"value="Responsável:"/><h:inputTextid="responsavel"value="#{empresa.responsavel}"/><h:messagefor="responsavel"errorClass="invalid"/><h:outputLabelfor="site"value="Site:"/><h:inputTextid="site"value="#{empresa.site}"/><h:messagefor="site"errorClass="invalid"/><h:outputLabelfor="grupo"value="Grupo:"/><h:selectOneMenuid="grupo"value="#{empresa.grupo}"converter="#{empresaController.convertGrupo}"><f:selectItemitemLabel=""itemValue=""/><f:selectItemsvalue="#{grupos}"var="_grupo"itemLabel="#{_grupo}"itemValue="#{_grupo.id}"/></h:selectOneMenu><h:messagefor="grupo"errorClass="invalid"/><h:outputLabelfor="observacao"value="Observação:"/><h:inputTextareaid="observacao"value="#{empresa.observacao}"/><h:messagefor="observacao"errorClass="invalid"/></h:panelGrid><p><h:commandButtonid="salvar"action="#{empresaController.salvar}"value="Salvar"styleClass="register"/><c:choose><c:whentest="#{!empty empresa.id}"><h:commandButtonid="cancelar"action="view"value="Cancelar"styleClass="register"immediate="true"><f:paramid="id"value="#{empresa.id}"/></h:commandButton></c:when><c:otherwise><h:commandButtonid="cancelar"action="list"value="Cancelar"styleClass="register"immediate="true"/></c:otherwise></c:choose><h:messagesstyleClass="messages"errorClass="invalid"infoClass="valid"warnClass="warning"globalOnly="true"/></p></h:form></ui:define></ui:composition>
gmantovani2005
Eu descobri que o problema está na classe Grupo.
O valor que está sendo passado como objeto para o equals é o ID e não o objeto do grupo, então a comparação faz aparecer o erro.
Fiz uma alteração no grupo para comparar o ID do objeto com o objeto que está sendo enviado para o método da seguinte forma: