Erro no conversor para SelectManyCheckbox

2 respostas
jsfjava
N

estou fazendo uma aplicação Java web e me deparei com um problema no conversor para ser usado no selectmanycheckbox. O conversor que fiz foi esse:

@FacesConverter(forClass = Indicacao.class)
public class IndicacaoConverter implements Converter {

// @Inject
private Procedimentos procedimentos;

public IndicacaoConverter() {
    procedimentos = CDIServiceLocator.getBean(Procedimentos.class);
}

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
    Indicacao retorno = null;

    if (value != null) {
        Long id = new Long(value);
        retorno = procedimentos.porId(id);
    }

    return retorno;
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    if (value != null) {
        Indicacao indicacao = (Indicacao) value;
        return indicacao.getId() == null ? null : indicacao.getId().toString();
    }

    return "";
}

}
O erro…

Caused by: java.lang.NumberFormatException: For input string: "com.odontoclinicas.clinicas.model.Indicacao@20"

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)

at java.lang.Long.parseLong(Long.java:589)

at java.lang.Long.(Long.java:965)

at com.odontoclinicas.clinicas.converter.IndicacaoConverter.getAsObject(IndicacaoConverter.java:27)

at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValues(MenuRenderer.java:513)

at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValuesForModel(MenuRenderer.java:337)

at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValue(MenuRenderer.java:128)

at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:314)

at org.primefaces.component.selectmanycheckbox.SelectManyCheckboxRenderer.getConvertedValue(SelectManyCheckboxRenderer.java:39)

at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1034)

at javax.faces.component.UIInput.validate(UIInput.java:964)

at javax.faces.component.UIInput.executeValidate(UIInput.java:1237)

at javax.faces.component.UIInput.processValidators(UIInput.java:702)

at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1220)

at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1220)

at org.primefaces.util.ComponentUtils.processValidatorsOfFacetsAndChilds(ComponentUtils.java:313)

at org.primefaces.component.api.UITabPanel.processValidators(UITabPanel.java:1073)

at javax.faces.component.UIForm.processValidators(UIForm.java:253)

at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1220)

at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1220)

at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1164)

at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)

 53 more

Está indicando para essa linha…

Long id = new Long(value);

2 Respostas

Weverton_Reis

Boa tarde,

Faz o seguinte:
Defina o conversor utilizando esse atributo:

converter="meuConverterComNome"

E coloque o nome:
@FacesConverter(forClass = Indicacao.class, name = "meuConverterComNome") public class IndicacaoConverter implements Converter {

Se não me engano é um problema com o Generics.

List<Indicaocao> lista

Eu passei por esse problema utilizando a versão 2.0 jsf e primefaces 5.x

Ve ai se funciona.

N

Obrigado. Resolveu usando o value na class converter e chamando no componente na pagina

Criado 22 de fevereiro de 2018
Ultima resposta 28 de fev. de 2018
Respostas 2
Participantes 2