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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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?
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!