Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida sobre o getAsObject

Alguem consegueria me informar pq nesse metodo chegou o id, ao inves do objeto todo ? Eu vendo professor executar realmente achei q chegaria o tostring do objeto Autor. E teria que trabalhar com essa string para transformar o objeto. Mas chegou o id, show de bola mas pq ? Não ficou claro . A explicação q eu me dei é ele procura por algum atributo com o nome 'id'

@Override
    public Object getAsObject(FacesContext context, UIComponent component, String id) {

        if (id == null || id.trim().isEmpty())
            return null;


        System.out.println("Converter id: " + id);
        Autor autor = new Autor();
        autor.setId(Integer.valueOf(id));

        return autor;
    }

lembrando q conforme o codigo abaixo a tela passa o objeto inteiro :

<h:selectManyListbox value="#{adminLivrosBean.livro.autores}"
            converter="autorConverter" id="autores">
            <f:selectItems var="autor" value="#{adminLivrosBean.autores}"
                itemValue="#{autor}" itemLabel="#{autor.nome}" />
        </h:selectManyListbox>
1 resposta
solução!

Oi Paulo, tudo bem?

O getAsObject recebe o id do objeto justamente porque o getAsString transforma o objeto no ID:

@FacesConverter("autorConverter")
public class AutorConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext context, 
            UIComponent component, String id) {
        if (id == null || id.trim().isEmpty()) return null;
        System.out.println("Convertendo para Objeto: " + id);

        Autor autor = new Autor();
        autor.setId(Integer.valueOf(id));

        return autor;
    }

    @Override
    public String getAsString(FacesContext context, 
            UIComponent component, Object autorObject) {
        if (autorObject == null) return null;
        System.out.println("Convertendo para String: " + autorObject);

        Autor autor = (Autor) autorObject;
        return autor.getId().toString();
    }

}

Ou seja:

<h:selectManyListbox value="#{adminLivrosBean.livro.autores}"
            converter="autorConverter" id="autores"> 
            <f:selectItems var="autor" value="#{adminLivrosBean.autores}"
                itemValue="#{autor}"  itemLabel="#{autor.nome}" /> => usa o método getAsString para colocar como value o ID do autor
        </h:selectManyListbox>