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?
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!