FacesConverter PickList do Primefaces + Spring

4 respostas
furacao123

galera estou apanhando aqui para fazer o PickList do PrimeFaces funcionar na minha aplicação, consegui fazer mostrar o componente com as respectivas listas, mas não consigo salvar, quando clico em salvar retorna o seguinte erro,

Erro de conversão ao definir o valor 'EMPRESA TESTE' para 'null Converter'.

segue o meu Converter
@FacesConverter(value = "empresaPickListConverter")
public class EmpresaPickListConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        return getObjectFromUIPickListComponent(component, value);
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object object) {
        String string;
        if (object == null) {
            string = "";
        } else {
            try {
                string = String.valueOf(((Empresa) object).getId());
            } catch (ClassCastException cce) {
                cce.printStackTrace();
                throw new ConverterException();
            }
        }
        return string;
    }

    @SuppressWarnings("unchecked")
    private Empresa getObjectFromUIPickListComponent(UIComponent component, String value) {
        final DualListModel<Empresa> dualList;
        try {
            dualList = (DualListModel<Empresa>) ((PickList) component).getValue();
            Empresa empresa = getObjectFromList(dualList.getSource(), Integer.valueOf(value));
            if (empresa == null) {
                empresa = getObjectFromList(dualList.getTarget(), Integer.valueOf(value));
            }

            return empresa;
        } catch (ClassCastException cce) {
            cce.printStackTrace();
            throw new ConverterException();
        } catch (NumberFormatException nfe) {
            nfe.printStackTrace();
            throw new ConverterException();
        }
    }

    private Empresa getObjectFromList(final List<?> list, final Integer identifier) {
        for (final Object object : list) {
            final Empresa empresa = (Empresa) object;
            if (empresa.getId().equals(identifier)) {
                return empresa;
            }
        }
        return null;
    }
}
<p:tab title="Empresa">
                                <p:pickList value="#{usuarioController.listaEmpresas}"
                                            var="empresa" iconOnly="true" effect="drop"  
                                            itemLabel="#{empresa.nomeFantasia}" converter="empresaPickListConverter"
                                            itemValue="#{empresa}" 
                                            showSourceControls="true" showTargetControls="true">  
                                    <f:facet name="sourceCaption">Disponivel</f:facet>  
                                    <f:facet name="targetCaption">Selecionadas</f:facet> 
                                </p:pickList>
                            </p:tab>

E aqui ao licar nesse commandButton dispara esse erro, ele nem chega a chamar o metodo gravarUsuario, depois disso todos os meus objetos ficam travados, eles nao tem os valores alterados.

<p:commandButton id="btnSalvar" value="Salvar" styleClass="btn-texto" image="btn-aceito"
                                         oncomplete="dlgUsuario.hide()"
                                         actionListener="#{usuarioController.gravarUsuario}" 
                                         update="tbUsuario,growlMessage" />

O que estou fazendo de errado?

4 Respostas

Hebert_Coelho

Apareceu alguma exception no console alem dessa?

furacao123

No console nao dispara nenhuma exception

furacao123

O estranho é que mesmo tirando o actionListener do botao ele mostra esse erro, nao esta sendo executado ação nenhuma.

Mas por padrao o commandButtom é submit correto?

Entao deve estar dando submite no dialog e disparando esse erro

furacao123

putz acabei verificando aqui o problema estava em um SelectOneMenu que nao tinha um converter e eu estava passando uma lista de objetos para ele.

Aproveitando o converter para um selectOneMenu eu tenho sempre que fazer o converter buscar o objeto pelo Dao ?

Criado 9 de dezembro de 2011
Ultima resposta 12 de dez. de 2011
Respostas 4
Participantes 2