Na verdade, nem sei se o autoComplete chega a ser consultado.
A chamada do p:autoComplete:
<p:autoComplete value="#{autoCompleteEndereco.enderecoSelecionado}" id="enderecoInput"
completeMethod="#{autoCompleteEndereco.completaEndereco}" var="e" itemLabel="#{e.id}" itemValue="#{e.logradouro}" converter="#{enderecoConverter}" />
A Classe cujo método invoca o DAO com a lista de sugestõesr:
public class AutoCompleteEndereco {
private EnderecoBean enderecoSelecionado;
// Construtor, getters e setters omitidos...
public List<EnderecoBean> completaEndereco(String query) {
List<EnderecoBean> sugestoes = new ArrayList<EnderecoBean>();
EnderecoDAO dao = null;
try {
sugestoes = dao.getEnderecos();
}
// Catch omitido...
for(EnderecoBean eb : sugestoes) {
if(eb.getLogradouro().startsWith(query)) {
sugestoes.add(eb);
}
}
return sugestoes;
// Etc...
faces-config.xml:
<converter>
<converter-id>autoCompleteEndereco</converter-id>
<converter-for-class>beans.AutoCompleteEndereco</converter-for-class>
</converter>
Os métodos da Classe que implementa o Converter:
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String submittedValue) {
iif(submittedValue.trim().equals("")) {
return null;
}
else {
return (Object)submittedValue;
}
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object value) {
if(value == null || value.equals("")) {
return "";
}
else {
return String.valueOf(value);
}
}
Essa parte da conversão ficou confusa para mim.
O que ele precisa converter? O que o usuário digitou (uma String) ou o Objeto que estou tentando mandar como sugestão no SELECT? (Que é um List de objetos do tipo EnderecoBean).