[RESOLVIDO] Pegar valor do AutoComplete Primefaces

Olá pessoal, tudo bom?

estou com um pequeno problema da qual não estou conseguindo enxergar a solução…
Mas uma vez segui o blog do jakefrog (http://uaihebert.com/?p=1414), tutorial muito bom por sinal, recomendo! Mas provavelmente pela minha vasta experiencia (ironico), estou sofrendo um pouquinho… hehe
tenho o componente AutoComplete do Primefaces, funcionando (é o que parece)… eu escrevo o nome desejado e ele me retorna uma lista que contem esses nomes…
Certo, porém preciso pegar esse valor (objeto) escolhido para salvar em uma outra tabela… o problema é que esse valor só está retornando null… não sei o que posso estar fazendo…

vou postar o código aqui, qualquer coisa a mais que for preciso para melhor entendimento, solicitem por favor! Agradeço desde já!!!

Converter

[code]
@FacesConverter(forClass = sico.modelo.Paciente.class)
public class PacienteConverter implements Converter {

@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
	IntBDManterPaciente pacienteDAO = new IntBDManterPaciente();
	int idPaciente;

	try {
		idPaciente = Integer.parseInt(arg2);
	} catch (NumberFormatException exception) {
		throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Digite o nome de um paciente e selecione-o", ""));
	}

	return pacienteDAO.find(idPaciente);
}

@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {

	if (arg2 == null) {
		return "";
	}
	Paciente paciente = (Paciente) arg2;
	return String.valueOf(paciente.getCod_paciente());
}

}[/code]
xhtml

<p:autoComplete id="autocompl" size="25" forceSelection="true" minQueryLength="3" value="#{ctrlRegConsulta.paciente}" required="true" var="pac"
								itemLabel="#{pac.nome}" itemValue="#{pac}" completeMethod="#{ctrlRegConsulta.complete}" />

método para o autocomplete

public List<Paciente> complete(String nome) {
		List<Paciente> queryResult = new ArrayList<Paciente>();

		pacienteDAO.beginTransaction();
		if (listapaciente == null) {
			listapaciente = pacienteDAO.buscaTudo();
		}
		pacienteDAO.commitAndCloseTransaction();
		for (Paciente paciente : listapaciente) {
			if (paciente.getNome().toLowerCase().contains(nome.toLowerCase())) {
				queryResult.add(paciente);
			}
		}
		return queryResult;
	}

método para testar o que esta pegando (esta retornando null)

public void teste2(){
    	Integer idPac = paciente.getCod_paciente();
    	pacienteDAO.beginTransaction();
    	Paciente pac = pacienteDAO.find(idPac);
    	System.out.println("paciente: " + pac.getNome());
    	pacienteDAO.commitAndCloseTransaction();
    }

Valeu!

Consegui resolver o problema… de fato era algo ‘bobo’ mesmo…
O problema era que eu não abria a conexao do meu DAO no Converter na hora de recuperar o usuário selecionado!! (=
Precisei tirar também o process=@this do botão, pois não estava pegando o valor do campo…

Mas enfim, agora surgiu uma outra questão… nesse formulário do AutoComplete, tenho o campo de Telefone tambem do usuário, e este não pode ser nulo…
Gostaria que, ao ser selecionado o usuario pelo Autocomplete… preenchesse automaticamente o campo telefone deste, já que recupero o objeto inteiro…

Alguém tem uma sugestão?!
Obrigado! :smiley:

Dentro do seu autoComplete adicione um ajax no evento de itemSelect. Neste ajax você tem um listener onde vai obter o telefone do usuário atribuir a propriedade telefone do seu managedBean. Ainda no seu comando de ajax dentro do autoComplete você deve dar um update no campo de telefone do formulário passando seu id.

<p:ajax event="itemSelect" listener="#{managedBean.usuarioSelecionado}" update="campoTelefone" />

[]`s

Valeeu grinche!!

Deu certo, sem o listener mesmo…

<p:ajax event="itemSelect" update="campoTelefone" /> 

como ele retorna o objeto ao selecionar no autocomplete, apenas um update no componente do telefone e usando o event itemSelect resolveu!!

Obrigadaao pela ajuda nesse post, e no outro da query null :smiley: hehe

Abraços!!