1.7 <p:selectOneMenu> eventos en list.xhtml

Cuando usamos un <p:selectOneMenu en el list.xhtml deseamos hacer un filtro y actualizar el datatable con el filtro creado, recuerde que en el list.xhtml necesitamos invocar el método move() con lo que es necesario guardar el search y el valor para luego realizar la operación.

Definimos el selectOneMenu

  <b:panelGrid colSpans="2,4,2,4"  columns="4" size="xs"> 

   <p:outputLabel value="#{msg['field.secretarioadministrativo']}"/>
   <p:selectOneMenu id="secretarioadministrativo" value="#{secretarioAdministrativoController.vistoBuenoSecretarioAdministrativoSearch}" style="width:150px">
   <p:ajax listener="#{secretarioAdministrativoController.onVistoBuenoChangeSecretarioAdministrativo}" update=":form:dataTable" />
             <f:selectItem itemLabel="#{msg['selectitem.seleccione']}" itemValue="" noSelectionOption="true" />
             <f:selectItem itemLabel="#{msg['selectitem.pendiente']}" itemValue="pe" />
             <f:selectItem itemLabel="#{msg['selectitem.aprobado']}" itemValue="si" />
             <f:selectItem itemLabel="#{msg['selectitem.noaprobado']}" itemValue="no" />
    </p:selectOneMenu>

   <p:outputLabel value="#{msg['field.coordinador']}"/>
   <p:selectOneMenu id="coordinador" value="#{secretarioAdministrativoController.vistoBuenoSearch}" style="width:150px">
   <p:ajax listener="#{secretarioAdministrativoController.onVistoBuenoChange}" update=":form:dataTable" />
           <f:selectItem itemLabel="#{msg['selectitem.seleccione']}" itemValue="" noSelectionOption="true" />
           <f:selectItem itemLabel="#{msg['selectitem.pendiente']}" itemValue="pe" />
           <f:selectItem itemLabel="#{msg['selectitem.aprobado']}" itemValue="si" />
           <f:selectItem itemLabel="#{msg['selectitem.noaprobado']}" itemValue="no" />
    </p:selectOneMenu>

En el Controller definir

Atributos para las búsquedas

 private String vistoBuenoSecretarioAdministrativoSearch = "no";
 private String viajeSecretarioAdministrativoSearch = "no";

Definir los eventos e invocar el metodo setSearchAndValue(). Recuerde que este método esta definido en el framework.

// <editor-fold defaultstate="collapsed" desc="String onVistoBuenoChange()">
    public String onVistoBuenoChange() {
        try {
             setSearchAndValue("vistobuenocoordinador", vistoBuenoSearch);
            move(page);
        } catch (Exception e) {
            errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());
        }
        return "";
    }// </editor-fold>
    // <editor-fold defaultstate="collapsed" desc="String onVistoBuenoChangeSecretarioAdministrativo()">

    public String onVistoBuenoChangeSecretarioAdministrativo() {
        try {
            setSearchAndValue("vistobuenosecretarioadministrativo", vistoBuenoSecretarioAdministrativoSearch);
           
            move(page);
        } catch (Exception e) {
            errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());
        }
        return "";
    }// </editor-fold>

En el metodo move() implementamos la búsqueda recuperando los valores del search y el searchValue

// <editor-fold defaultstate="collapsed" desc="move(Integer page)">
    @Override
    public void move(Integer page) {
        try {

            this.page = page;
            solicitudDataModel = new SolicitudDataModel(solicitudList);

            Usuario jmoordb_user = (Usuario) JmoordbContext.get("jmoordb_user");

            String descripcion = jmoordb_user.getUnidad().getIdunidad();
            Document doc = new Document("activo", "si");

            switch (getSearch()) {
                case "_init":
                case "_autocomplete":

                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;

                case "idsolicitud":
                    if (getValueSearch() != null) {
                        solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));
                    } else {
                        solicitudList = solicitudRepository.findPagination(doc, page, rowPage);
                    }

                    break;

                case "estatus":
                    Estatus estatus = new Estatus();
                    estatus = (Estatus) getValueSearch() ;
                    doc.append("estatus.idestatus", estatus.getIdestatus());
                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;

                case "_betweendates":

                    solicitudList = solicitudRepository.filterBetweenDatePaginationWithoutHours("activo", "si",
                            "fechahorapartida", fechaDesde,
                            "fechahoraregreso", fechaHasta,
                            page, rowPage, new Document("idsolicitud", -1));
                    break;
                case "vistobuenocoordinador":

                    String vistoBueno = (String) getValueSearch() ;
                    doc = new Document("activo", "si");
                    doc.append("vistoBueno.aprobado", vistoBueno);
                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;
                case "vistobuenosecretarioadministrativo":

                    String vistoBuenoSecretarioAdministrativo = (String) getValueSearch() ;
                    doc = new Document("activo", "si");
                    doc.append("vistoBuenoSecretarioAdministrativo.aprobado", vistoBuenoSecretarioAdministrativo);
                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;
                case "porsolicitado":

                    Usuario solicita = (Usuario)getValueSearch() ;
                    doc = new Document("activo", "si");
                    doc.append("usuario.0.username", solicita.getUsername());
                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;
                case "porresponsable":

                    Usuario responsable = (Usuario) getValueSearch() ;
                    doc = new Document("activo", "si");
                    doc.append("usuario.1.username", responsable.getUsername());
                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;
                default:

                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;
            }

            solicitudDataModel = new SolicitudDataModel(solicitudList);

        } catch (Exception e) {
            errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());

        }

    }// </editor-fold>

Last updated