AutoComplete PrimeFaces

Boa noite, estou com um problema no meu autocomplete…

Quando eu tento utilizar o var ele não me atribui o nome…

<p:autoComplete value="#{internacaoBean.paciente}" id="autopaciente" completeMethod="#{internacaoBean.completaPaciente}" converter="pacienteConverter" var="p" itemLabel="#{p}" itemValue="#{p}">

No item Label quero utilizar o p.getNome, mas ele não me abre nada e se eu forçar ele fala que não existe o método… Vai minhas classes

InternacaoBean

package healthcare.control;

import healthcare.modelo.Dispositivo;
import healthcare.modelo.Enfermeiro;
import healthcare.modelo.Internacao;
import healthcare.modelo.Medico;
import healthcare.modelo.Paciente;
import healthcare.util.DAOFactory;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

/**
 *
 * @author Ulisses
 */
@ManagedBean
@ViewScoped
public class InternacaoBean {
    private Internacao internacao = new Internacao();
    private Dispositivo dispositivo = new Dispositivo();
    private List<Paciente> listaPaciente;
    private List<Medico> listaMedico;
    private List<Enfermeiro> listaEnfermeiro;
    private List<Internacao> listaInternacao;
    private List<Internacao> listaInternacaoFiltro;
    private SelectItem[] opcaoStatus;
    private Paciente paciente;

    public InternacaoBean() {
        listaInternacao = listaInternacaoFiltro = listaInternacao();
    }

    public Internacao getInternacao() {
        return internacao;
    }

    public Paciente getPaciente() {
        return paciente;
    }

    public void setPaciente(Paciente paciente) {
        this.paciente = paciente;
    }

    public void setInternacao(Internacao internacao) {
        this.internacao = internacao;
    }

    public Dispositivo getDispositivo() {
        return dispositivo;
    }

    public void setDispositivo(Dispositivo dispositivo) {
        this.dispositivo = dispositivo;
    }

    public List<Internacao> getListaInternacao() {
        return listaInternacao;
    }

    public void setListaInternacao(List<Internacao> listaInternacao) {
        this.listaInternacao = listaInternacao;
    }

    public List<Internacao> getListaInternacaoFiltro() {
        return listaInternacaoFiltro;
    }

    public void setListaInternacaoFiltro(List<Internacao> listaInternacaoFiltro) {
        this.listaInternacaoFiltro = listaInternacaoFiltro;
    }

    public List<Paciente> getListaPaciente() {
        return listaPaciente;
    }

    public void setListaPaciente(List<Paciente> listaPaciente) {
        this.listaPaciente = listaPaciente;
    }

    public List<Medico> getListaMedico() {
        return listaMedico;
    }

    public void setListaMedico(List<Medico> listaMedico) {
        this.listaMedico = listaMedico;
    }

    public List<Enfermeiro> getListaEnfermeiro() {
        return listaEnfermeiro;
    }

    public void setListaEnfermeiro(List<Enfermeiro> listaEnfermeiro) {
        this.listaEnfermeiro = listaEnfermeiro;
    }

    public SelectItem[] getOpcaoStatus() {
        return opcaoStatus;
    }

    public void setOpcaoStatus(SelectItem[] opcaoStatus) {
        this.opcaoStatus = opcaoStatus;
    }
    
        
    private List<Internacao> listaInternacao(){
        return DAOFactory.createInternacaoDAO().listar();
    }
    
    public void novaInternacao(){
        internacao = new Internacao();
        listaEnfermeiro = DAOFactory.createEnfermeiroDAO().listar();
        listaMedico = DAOFactory.createMedicoDAO().listar();
        listaPaciente = DAOFactory.createPacienteDAO().listar();
        for(int i=0;i<listaPaciente.size();i++){
            Paciente a = listaPaciente.get(i);
            System.out.println("Paciente:"+a.getNome());
        }
    }
    
    
    public List<Paciente> completaPaciente(String query) {  
        List<Paciente> sugestao = new ArrayList<Paciente>();  
        Paciente pac;
        
        for(int i=0;i<listaPaciente.size();i++){
            pac = listaPaciente.get(i);
            if(pac.getNome().startsWith(query))
                sugestao.add(pac);
        }
          
        System.out.println("Passei Aqui!");
        for(int i=0;i<sugestao.size();i++){
            Paciente a = sugestao.get(i);
            System.out.println("Paciente:"+a.getNome());
        }
        return sugestao;  
    }  
    
    
}

Cadastro Internacao

[code]<?xml version='1.0' encoding='UTF-8' ?>

<body>
    <ui:composition template="./Modelo.xhtml">

        <ui:define name="content">
            <h:form id="frm_internacao_lista">
                <p:dataTable id="dtinternacao" var="inter" value="#{internacaoBean.listaInternacao}" rowKey="#{inter.id}"
                             selection="#{internacaoBean.internacao}" selectionMode="single" emptyMessage="Nenhuma Internação Ativa"
                             filteredValue="#{internacaoBean.listaInternacaoFiltro}">
                    
                    <f:facet name="header">
                        <p:commandButton action="#{internacaoBean.novaInternacao}" update=":frm_novainternacao_menu:dialognovainternacao" oncomplete="menuNovaInternacao.show()" value="Nova Internação" icon="ui-icon-document"/>
                    </f:facet>
                    
                    <p:column headerText="Data Entrada" filterMatchMode="contains" filterBy="#{inter.dtEntrada}">
                        <p:outputLabel value="#{inter.dtEntrada}"/>
                    </p:column>
                    
                    <p:column headerText="Data Saída" filterMatchMode="contains" filterBy="#{inter.dtSaida}">
                        <p:outputLabel value="#{inter.dtSaida}"/>
                    </p:column>
                    
                    <p:column headerText="Paciente" filterMatchMode="contains" filterBy="#{inter.PACIENTEid.nome}">
                        <p:outputLabel value="#{inter.PACIENTEid.nome}"/>
                    </p:column>
                    
                    <p:column headerText="Médico" filterMatchMode="contains" filterBy="#{inter.MEDICOid.nome}">
                        <p:outputLabel value="#{inter.MEDICOid.nome}"/>
                    </p:column>
                    
                    <p:column headerText="Status" filterMatchMode="contains" filterBy="#{inter.status}">
                        <p:outputLabel value="#{inter.status}"/>
                    </p:column>       
                </p:dataTable>
            </h:form>
            
            
            <h:form id="frm_novainternacao_menu">
                <p:dialog id="dialognovainternacao" header="Nova Internação" widgetVar="menuNovaInternacao" modal="true">
                    <h:inputHidden value="#{internacaoBean.internacao.id}"/>
                    <h:panelGrid columns="2"/>
                    <p:outputLabel value="Paciente:"/>
                    <p:autoComplete value="#{internacaoBean.paciente}" id="autopaciente" completeMethod="#{internacaoBean.completaPaciente}"
                                    converter="pacienteConverter" var="p" itemLabel="#{p}" itemValue="#{p}">
                        <p:column>
                            Nome: #{p}
                        </p:column>
                    
                        
                    </p:autoComplete>
                    
                    <p:outputLabel value="Médico:"/>
                    
                    <p:outputLabel value="Enfermeiro:"/>
                    
                </p:dialog>
                
            </h:form>
        </ui:define>
    </ui:composition>
</body>
[/code]

PacienteConverter

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package healthcare.control;

import healthcare.dao.PacienteDAO;
import healthcare.modelo.Paciente;
import healthcare.util.DAOFactory;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;

/**
*

  • @author Ulisses
    */
    @FacesConverter(value = “pacienteConverter”)
    public class PacienteConverter implements Converter{

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value){
    if(value != null && value.trim().length()>0){
    Integer id = Integer.valueOf(value);
    try{
    PacienteDAO dao = DAOFactory.createPacienteDAO();
    return dao.carregar(id);
    } catch(Exception e) {
    throw new ConverterException(“Não foi possivel encontrar o Zigbee de código:” + value + “.” + e.getMessage());
    }
    }
    return null;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value){
    if (value != null){
    Paciente paciente = (Paciente) value;
    return paciente.getId().toString();
    }
    return “”;
    }

}
[/code]

Ali no autocomplete você deve usar p.nome para se referir ao atributo nome.

Mas ai que está o problema… ele não reconhece nada além do p… Se eu ponho .getNome… ou qualquer coisa ele não funciona somente o P

Você quer dizer que a IDE não está autocompletando seu código? Se for isso acontece comigo toda hora… Mas experimentou colocar p.nome mesmo assim? Lembrando que quando o esperado é uma propriedade (não um método), deve-se usar o nome do atributo, sem o get. E os gets e sets do atributo obrigatoriamente têm que existir no bean.