Depois de muito tentar, consegui implementar um autoComplete do PrimeFaces na minha aplicação. Porém, funciona de um modo diferente do que eu esperava. Aqui está ele resumido:
<p:autoComplete value="#{eleitor.endereco_id}" id="enderecoInput" completeMethod="#{enderecoC.complete}" var="e" itemLabel="#{e.descricao}#{' '}#{e.cep}#{' '}#{e.bairro_nome}" itemValue="#{e}" converter="#{enderecoConverter}" />
Independente das sugestões que ele mostre ao usuário, o que eu preciso salvar no banco é o id do bean Endereco. Aqui começa a dúvida. Qual é o valor que vai ser enviado ao tentar salvar na minha action do command button? O valor contido em value={#""} ou o valor contido em itemValue={#""} ?
Outra surpresa é, por quê eu consigo concatenar atributos do Bean endereco (por mim está ótimo desse jeito) no itemLabel, sendo que no meu Converter eu apenas retorno um único atributo String, que é o atributo descricao? Aqui está ele, resumido:
public String getAsString(FacesContext fc, UIComponent uic, Object o) {
EnderecoBean eb = new EnderecoBean();
eb = (EnderecoBean)o;
return eb.getDescricao();
}
Ele retorna apenas o atributo descricao do EnderecoBean, porém, no itemLabel do p:autoComplete eu consigo concatenar todos os atributos do bean. Por quê isso? Entretanto, o que eu preciso salvar mesmo é o id do EnderecoBean, que é a chave primária da tabela de endereços que deve estar contida no #eleitor.endereco.id
Porém, quando tento salvar ele me retorna a exception do outro método do Converter, que eu não precisei usar pois o autoComplete está funcionando (mais ou menos). O método é esse:
public Object getAsObject(FacesContext fc, UIComponent uic, String string) {
throw new UnsupportedOperationException("Not supported yet.");
}
Qual é a relação de estar retornando essa exception com o minha Action salvar?
<p:commandButton id="cadEleitorButton" value="Cadastrar" action="#{eleitorC.salvar(eleitor)}" />
O método que salva o Bean Eleitor no banco segue a mesma lógica de salvar o Bean Cadastrador, porém o Cadastrador é salvo normalmente, mas o Eleitor não, e ainda me retorna a exception do Converter.
Salvar o Cadastrador (funciona normalmente):
public String salvar(CadastradorBean cadastrador) {
try {
CadastradorDAO dao = new CadastradorDAO();
dao.salvar(cadastrador);
return "sucesso";
}
catch(Exception e) {
System.out.println("Falha ao tentar salvar cadastrador! " + e);
return "fracasso";
}
}
Salvar o Eleitor: (não salva, retorna uma exception do Converter):
public String salvar(EleitorBean eleitor) {
try {
EleitorDAO dao = new EleitorDAO();
dao.salvar(eleitor);
return "sucesso";
}
catch(Exception e) {
System.out.println("Falha ao tentar salvar eleitor! " + e);
return "fracasso";
}
}
Se alguém puder me ajudar a esclarecer esses problemas, desde já agradeço!