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

6 respostas
B

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;
      
      <a class="mention" href="/u/size">@Size</a>(max = 16)
      
      @Column(name = “ouv_cel”)
      
      private String ouvCel;
      
      <a class="mention" href="/u/size">@Size</a>(max = 50)
      
      @Column(name = “ouv_bairro”)
      
      private String ouvBairro;
      
      <a class="mention" href="/u/size">@Size</a>(max = 80)
      
      @Column(name = “ouv_end”)
      
      private String ouvEnd;
      
      <a class="mention" href="/u/size">@Size</a>(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;
      
      }
      
      <a class="mention" href="/u/override">@Override</a>
      
      public int hashCode() {
      
      int hash = 0;
      
      hash += (ouvintePK != null ? ouvintePK.hashCode() : 0);
      
      return hash;
      
      }
      
      <a class="mention" href="/u/override">@Override</a>
      
      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;
      
      }
      
      <a class="mention" href="/u/override">@Override</a>
      
      public String toString() {
      
      return “pacote_jangadeiro.Ouvinte[ ouvintePK=” + ouvintePK + " ]";
      
      }
      

    }

6 Respostas

RaulCrash

Nesta controller(atendimentoController) cria um metodo que busca as informações que voce deseja passando como parametro o item selecionado

///
#{atendimentoController.selected.atdOuvinte}

E no seu selectOneMenu tú coloca :

<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}" />
   <f:ajax listener="#{atendimentoController.metodoQueIraBuscarAsInformacoesQueVcDeseja}"/>
</h:selectOneMenu>
B

Entendi. Já estava estudando uma solução como você indicou, mas uma complicação pra mim está sendo essa passagem de parâmetro. Não estou conseguindo declarar essa passagem em um método.

B

Estou travado justamente na criação desse método que visa trazer informações do cliente selecionado.

Por exemplo, se quiser trazer o bairro do cliente selecionado no selectOneMenu. Desde já, agradeço pela atenção.

RaulCrash

Divide por partes, primeiro seu metodo na controller será algo similar a isto:

public class AtendimentoController
private Ouvinte ouvinteDetalhado;
// Aqui o atributo selected.atdOuvinte, me ajude o que seria este atributo selected? Class

public void buscarOuvinte(){
    Long idOuvinte = this.selected.atdOuvinte.getId();
    this.ouvinteDetalhado =   this.daoDoOuvinte.buscarOuvinteById(idOuvinte);
   //Apesar de achar isto redundante pois se você está passando o objeto pro selectOneMenu já tem as informaçoes carregadas..... 
}

Então é só usar seu ouvinteDetalhado como quiser…

B

Minha classe AtendimentoController:

package pacote_jangadeiro;

import pacote_jangadeiro.util.JsfUtil;
import pacote_jangadeiro.util.PaginationHelper;

import java.io.Serializable;

import java.util.Date;

import java.util.ResourceBundle;

import javax.ejb.EJB;

import javax.inject.Named;

import javax.enterprise.context.SessionScoped;

import javax.faces.component.UIComponent;

import javax.faces.context.FacesContext;

import javax.faces.convert.Converter;

import javax.faces.convert.FacesConverter;

import javax.faces.model.DataModel;

import javax.faces.model.ListDataModel;

import javax.faces.model.SelectItem;

import static pacote_jangadeiro.Ouvinte_.ouvDataregistro;
<a class="mention" href="/u/named">@Named</a>(“atendimentoController”)

@SessionScoped

public class AtendimentoController implements Serializable {
private Atendimento current;
private DataModel items = null;
@EJB
private pacote_jangadeiro.AtendimentoFacade ejbFacade;
private PaginationHelper pagination;
private int selectedItemIndex;

public AtendimentoController() {
}

public Atendimento getSelected() {
    if (current == null) {
        current = new Atendimento();
        selectedItemIndex = -1;
    }
    return current;
}

private Ouvinte ouvinteDetalhado;

// Aqui o atributo selected.atdOuvinte, me ajude o que seria este atributo selected? Class

public void Solucao() {
    System.out.println("kkkkkkk");
}

private AtendimentoFacade getFacade() {
    return ejbFacade;
}

public PaginationHelper getPagination() {
    if (pagination == null) {
        pagination = new PaginationHelper(10) {

            @Override
            public int getItemsCount() {
                return getFacade().count();
            }

            @Override
            public DataModel createPageDataModel() {
                return new ListDataModel(getFacade().findRange(new int[]{getPageFirstItem(), getPageFirstItem() + getPageSize()}));
            }
        };
    }
    return pagination;
}

public String prepareList() {
    recreateModel();
    return "List";
}

public String prepareView() {
    current = (Atendimento) getItems().getRowData();
    selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
    return "View";
}

public String prepareCreate() {
    current = new Atendimento();
    selectedItemIndex = -1;
    return "Create";
}

public String create() {
    try {
        getFacade().create(current);
        JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("AtendimentoCreated"));
        return prepareCreate();
    } catch (Exception e) {
        JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
        return null;
    }
}

public String prepareEdit() {
    current = (Atendimento) getItems().getRowData();
    selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
    return "Edit";
}

public String update() {
    try {
        getFacade().edit(current);
        JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("AtendimentoUpdated"));
        return "View";
    } catch (Exception e) {
        JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
        return null;
    }
}

public String destroy() {
    current = (Atendimento) getItems().getRowData();
    selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
    performDestroy();
    recreatePagination();
    recreateModel();
    return "List";
}

public String destroyAndView() {
    performDestroy();
    recreateModel();
    updateCurrentItem();
    if (selectedItemIndex >= 0) {
        return "View";
    } else {
        // all items were removed - go back to list
        recreateModel();
        return "List";
    }
}

private void performDestroy() {
    try {
        getFacade().remove(current);
        JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("AtendimentoDeleted"));
    } catch (Exception e) {
        JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
    }
}

private void updateCurrentItem() {
    int count = getFacade().count();
    if (selectedItemIndex >= count) {
        // selected index cannot be bigger than number of items:
        selectedItemIndex = count - 1;
        // go to previous page if last page disappeared:
        if (pagination.getPageFirstItem() >= count) {
            pagination.previousPage();
        }
    }
    if (selectedItemIndex >= 0) {
        current = getFacade().findRange(new int[]{selectedItemIndex, selectedItemIndex + 1}).get(0);
    }
}

public DataModel getItems() {
    if (items == null) {
        items = getPagination().createPageDataModel();
    }
    return items;
}

private void recreateModel() {
    items = null;
}

private void recreatePagination() {
    pagination = null;
}

public String next() {
    getPagination().nextPage();
    recreateModel();
    return "List";
}

public String previous() {
    getPagination().previousPage();
    recreateModel();
    return "List";
}

public SelectItem[] getItemsAvailableSelectMany() {
    return JsfUtil.getSelectItems(ejbFacade.findAll(), false);
}

public SelectItem[] getItemsAvailableSelectOne() {
    return JsfUtil.getSelectItems(ejbFacade.findAll(), true);
}

public Atendimento getAtendimento(java.lang.Integer id) {
    return ejbFacade.find(id);
}

@FacesConverter(forClass = Atendimento.class)
public static class AtendimentoControllerConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
        if (value == null || value.length() == 0) {
            return null;
        }
        AtendimentoController controller = (AtendimentoController) facesContext.getApplication().getELResolver().
                getValue(facesContext.getELContext(), null, "atendimentoController");
        return controller.getAtendimento(getKey(value));
    }

    java.lang.Integer getKey(String value) {
        java.lang.Integer key;
        key = Integer.valueOf(value);
        return key;
    }

    String getStringKey(java.lang.Integer value) {
        StringBuilder sb = new StringBuilder();
        sb.append(value);
        return sb.toString();
    }

    @Override
    public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
        if (object == null) {
            return null;
        }
        if (object instanceof Atendimento) {
            Atendimento o = (Atendimento) object;
            return getStringKey(o.getAtdId());
        } else {
            throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + Atendimento.class.getName());
        }
    }

}

}

RaulCrash

Cara me desculpa, mas vejo que você está bem perdido c/ o JSF. Ele é mais simples do que os códigos que você postou.
Sugiro você comprar um livro na Casa de Código (mega barato compra o ebook mesmo) de JSF, ele vai te ajudar a montar um sisteminha até completo e vai abordar todas estas situações que você utilizou.
Por que estou falando isto?

Por que tem varios metodos sem sentido, converter sem necessidade, escopo sendo utilizado de forma errada. Se eu tirasse pra falar cada item ficaria gigante este Post. Mas p/ sua solução solicitada a forma que te passei o metodo lá é só trocar o dao pela chamada do EJB.

Criado 6 de janeiro de 2017
Ultima resposta 6 de jan. de 2017
Respostas 6
Participantes 2