1
resposta

Conversores com injeção de Persistencia

Criei um conversor para receber os dados de um SelectOneMenu (combo) de Id/Objeto. Só que o @inject do DAO dentro do Conversor não funcionou. Qual a melhor forma de tratar isso? Injetar no Conversor um DAO é uma boa prática?

1 resposta

Olá Márcio, tudo bem?

Injetar um DAO dentro de um conversor pode ser uma prática útil, mas é importante ter em mente que a injeção de dependência em conversores pode ser um pouco mais complexa do que em outros componentes da aplicação.

Uma alternativa para resolver esse problema é utilizar a anotação @FacesConverter(forClass = SeuObjeto.class) em vez de injetar o DAO diretamente no conversor. Dessa forma, o conversor será automaticamente registrado no contexto do JSF e você poderá utilizar métodos estáticos para acessar o DAO dentro do conversor.

Por exemplo:

@FacesConverter(forClass = SeuObjeto.class)
public class SeuConversor implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        SeuObjetoDAO dao = (SeuObjetoDAO) context.getExternalContext().getApplicationMap().get("seuObjetoDAO");
        // Utilize o DAO para obter o objeto correspondente ao valor selecionado no combo
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        // Converta o objeto para uma representação em String
    }
}

Dessa forma, você pode acessar o DAO através do getApplicationMap() do ExternalContext e garantir que ele esteja disponível para o conversor.

Espero ter ajudado e bons estudos!