[RESOLVIDO] Pegar valor do AutoComplete Primefaces

3 respostas
P

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
@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());
	}
}
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!

3 Respostas

P

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:

G

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

P

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

Criado 11 de outubro de 2012
Ultima resposta 15 de out. de 2012
Respostas 3
Participantes 2