Listar dados de Cliente a partir de seleção no selectOneMenu

Caros,
Ainda estou me ambientando com linguagens web, mas gostaria de solicitar ajudar sobre como eu posso listar dados do cliente que estão no banco, sem refresh na página, a partir do cliente selecionado no selectOneMenu.

Sei que deve ser feito com ajax, mas peço um suporte do pessoal mais experiente.

  1. Trecho do XHTML:
    <h:body>
    <h:panelGroup id=“messagePanel” layout=“block”>
    <h:messages errorStyle=“color: red” infoStyle=“color: green” layout=“table”/>
    </h:panelGroup>
    <h:form>

                                         <!-- INICIO NOME DO OUVINTE -->
                                         <h:selectOneMenu value="#{atendimentoController.selected.atdOuvinte}" class="form-control select2" style="width: 100%;">
                                             <f:selectItem itemLabel="-Selecione-" itemValue=""/>
                                             <f:selectItems value="#{ouvinteController.items}" var="item" itemValue="#{item.ouvintePK.ouvNome}" itemLabel="#{item.ouvintePK.ouvNome}" />
                                         </h:selectOneMenu>
                                     </div>
                                 </h:form> 
                             </h:body>
    
  2. Ouvinte.java
    /*

    • To change this license header, choose License Headers in Project Properties.
    • To change this template file, choose Tools | Templates
    • and open the template in the editor.
      */
      package pacote_jangadeiro;

    import java.io.Serializable;
    import java.util.Date;
    import javax.persistence.Column;
    import javax.persistence.EmbeddedId;
    import javax.persistence.Entity;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.Table;
    import javax.validation.constraints.Size;
    import javax.xml.bind.annotation.XmlRootElement;

    /**
    *

    • @author vai
      */
      @Entity
      @Table(name = “ouvinte”)
      @XmlRootElement
      @NamedQueries({
      @NamedQuery(name = “Ouvinte.findAll”, query = “SELECT o FROM Ouvinte o”)})
      public class Ouvinte implements Serializable {

      private static final long serialVersionUID = 1L;
      @EmbeddedId
      protected OuvintePK ouvintePK;
      @Size(max = 16)
      @Column(name = “ouv_cel”)
      private String ouvCel;
      @Size(max = 50)
      @Column(name = “ouv_bairro”)
      private String ouvBairro;
      @Size(max = 80)
      @Column(name = “ouv_end”)
      private String ouvEnd;
      @Size(max = 12)
      @Column(name = “ouv_datanasc”)
      private String ouvDatanasc;
      @Column(name = “ouv_dataregistro”)
      private Date ouvDataregistro;

      public Ouvinte() {
      }

      public Ouvinte(OuvintePK ouvintePK) {
      this.ouvintePK = ouvintePK;
      }

      public Ouvinte(int ouvId, String ouvNome) {
      this.ouvintePK = new OuvintePK(ouvId, ouvNome);
      }

      public OuvintePK getOuvintePK() {
      return ouvintePK;
      }

      public void setOuvintePK(OuvintePK ouvintePK) {
      this.ouvintePK = ouvintePK;
      }

      public String getOuvCel() {
      return ouvCel;
      }

      public void setOuvCel(String ouvCel) {
      this.ouvCel = ouvCel;
      }

      public String getOuvBairro() {
      return ouvBairro;
      }

      public void setOuvBairro(String ouvBairro) {
      this.ouvBairro = ouvBairro;
      }

      public String getOuvEnd() {
      return ouvEnd;
      }

      public void setOuvEnd(String ouvEnd) {
      this.ouvEnd = ouvEnd;
      }

      public String getOuvDatanasc() {
      return ouvDatanasc;
      }

      public void setOuvDatanasc(String ouvDatanasc) {
      this.ouvDatanasc = ouvDatanasc;
      }

      public Date getOuvDataregistro() {
      return ouvDataregistro;
      }

      public void setOuvDataregistro(Date ouvDataregistro) {
      this.ouvDataregistro = ouvDataregistro;
      }

      @Override
      public int hashCode() {
      int hash = 0;
      hash += (ouvintePK != null ? ouvintePK.hashCode() : 0);
      return hash;
      }

      @Override
      public boolean equals(Object object) {
      // TODO: Warning - this method won’t work in the case the id fields are not set
      if (!(object instanceof Ouvinte)) {
      return false;
      }
      Ouvinte other = (Ouvinte) object;
      if ((this.ouvintePK == null && other.ouvintePK != null) || (this.ouvintePK != null && !this.ouvintePK.equals(other.ouvintePK))) {
      return false;
      }
      return true;
      }

      @Override
      public String toString() {
      return “pacote_jangadeiro.Ouvinte[ ouvintePK=” + ouvintePK + " ]";
      }

    }