Olá a todos, tenho o um Bean CDI ViewScoped onde faço a seguinte consulta:
//Busco os objetos que quero trabalhar em um autocomplete ou selectOneMenu
List<ObjTeste> listaDeObjetos = repository.findAllObjects();
No conversor desse objeto tenho o seguinte código:
@Named
public class ObjTesteConverter implements Converter, Serializable{
private static final long serialVersionUID = 1L;
@Inject
private ObjRepository objRepository;
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value != null && value.trim().length() > 0) {
try {
return objRepository.findObjById(Integer.parseInt(value));
} catch (NumberFormatException e) {
return null;
}
} else {
return null;
}
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value != "" && value != null) {
return String.valueOf(((ObjTeste) value).getId());
} else {
return null;
}
}
}
Vejam que neste código eu tenho uma consulta ao banco de dados desnecessária no converter, já que no Bean CDI eu já tenho o objeto.
Soluções que tentei:
- Solução 1 com @Named, @SessionScoped e HashMap na classe em vez de usar os atributos do UIComponent.
Como eu faria para ter um conversor CDI ou até mesmo JSF utilizando o escopo @ViewScoped?
OBS: Sei que o escopo @ViewScoped para CDI é do pacote javax.faces.view e para JSF é javax.faces.bean. Quando me refiro a JSF ou CDI estou dizendo: @ManagedBean ou @Named.