1.6 handleSelect de autocomplete en list.xhtml

Son los eventos que se ejecutan cuando alguien selecciona un elemento de los autocomplete para los formularios list.xhtml

En un formulario list.xhtml deseamos filtrar los elementos para almacenar en un datatable por lo cual, se usara en conjunto con el metodo move(), lo que realizamos es que los guardamos en el método

String setSearchAndValue(String search, Object valuesearch)

que ofrece Jmoordb y almacena el campo y valor para las búsquedas

Reglas

1. Los autocomplete que buscan en atributos del entity simple no necesitan implementar el método handleAutocompleteOfListXhtml ya que internamente se controla el entity seleccionado.

<jmoordbjsf:autocomplete converter="#{rolConverter}"
                                             completeMethod="#{rolController.rolServices.complete}"
                                             labeltip1="#{msg['field.idrol']} #{p.idrol}"
                                             labeltip2="#{msg['field.rol']} #{p.rol}"
                                             listener="#{rolController.handleAutocompleteOfListXhtml}"
                                             value="#{rolController.rolSearch}"
                                             itemLabel="#{p.idrol}"
                                             field="idrol"
                                             update=":form:dataTable"/>

Solo necesita validar en el método move(), no necesita definir el método handleAutocompleteOfListXhtml, ya que este se encuentra el jmoordb y el value apunta al entitySearch, que forma parte de la estandarizacion y con esto el framework conoce que es el mismo entity que debe manejar. Si se usa otro entity para el value debe definir el método que lo valide. Internamete el metodo obtiene el valor del {entity}Search.

rolController.handleAutocompleteOfListXhtml
 @Override
    public void move(Integer page) {
        try {
            this.page = page;
            rolDataModel = new RolDataModel(rolList);
            Document doc;

            switch (getSearch()) {
                case "_init":
                    rolList = rolRepository.findPagination(page, rowPage);
                    break;
                case "_autocomplete":
                    break;

                case "idrol":
                    if (getValueSearch() != null) {
                        rolSearch.setIdrol(getValueSearch().toString());
                        doc = new Document("idrol", rolSearch.getIdrol());
                        rolList = rolRepository.findPagination(doc, page, rowPage, new Document("idrol", -1));
                    } else {
                        rolList = rolRepository.findPagination(page, rowPage);
                    }

                    break;

                case "rol":
                    if (getValueSearch()!= null) {
                        rolSearch.setRol(getValueSearch().toString());
                        rolList = rolRepository.findRegexInTextPagination("rol", rolSearch.getRol(), true, page, rowPage, new Document("rol", -1));

                    } else {
                        rolList = rolRepository.findPagination(page, rowPage);
                    }

                    break;
                case "activo":
                    if (getValueSearch() != null) {
                        rolSearch.setActivo(getValueSearch().toString());
                        doc = new Document("activo", rolSearch.getActivo());
                        rolList = rolRepository.findPagination(doc, page, rowPage, new Document("idrol", -1));
                    } else {
                        rolList = rolRepository.findPagination(page, rowPage);
                    }
                    break;

                default:
                    rolList = rolRepository.findPagination(page, rowPage);
                    break;
            }

            rolDataModel = new RolDataModel(rolList);

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

        }

    }

2. Los autocomplete en los formularios list que buscan por otro atributo o en entitys complejos deben implementar en el controller el método para asignar los valores a ser usados en el método move.

En este ejemplo usamos búsquedas mas complejas que no se almacenan en el {entity}Search, en estos casos debemos implementar nuestros métodos para validarlo.

Observe el value y el listener.

  <p:outputLabel value="#{msg['field.solicitadopor']}"/>
  <jmoordbjsf:autocomplete converter="#{usuarioConverter}"
               completeMethod="#{secretarioAdministrativoController.usuarioServices.complete}"
               labeltip1="#{msg['field.username']} #{p.username}"
               labeltip2="#{msg['field.nombre']} #{p.nombre}"   
               listener="#{secretarioAdministrativoController.handleSelectPorSolicitado}"
               value="#{secretarioAdministrativoController.solicita}"
               itemLabel=" #{p.nombre}"
               field="nombre"
               dropdown="true"
               minQueryLength="0"
               update=":form:dataTable"
               size="35"
              />
   <p:outputLabel value="#{msg['field.responsable']}"/>
   <jmoordbjsf:autocomplete converter="#{usuarioConverter}"
               completeMethod="#{secretarioAdministrativoController.usuarioServices.complete}"
               labeltip1="#{msg['field.username']} #{p.username}"
               labeltip2="#{msg['field.nombre']} #{p.nombre}"   
               listener="#{secretarioAdministrativoController.handleSelectPorResponsable}"
               value="#{secretarioAdministrativoController.responsable}"
               itemLabel=" #{p.nombre}"
               field="nombre"
               dropdown="true"
               minQueryLength="0"
               update=":form:dataTable"
               size="35"
  />

En este ejemplo se crean en Controller un objeto para almacenar la seleccion

 Usuario solicita = new Usuario();
 Usuario responsable = new Usuario();

Implementamos el método invocamos al metodo setSearchAndValue del framework jmoordb para que almacene el nombre del campo de búsqueda y el valor

// <editor-fold defaultstate="collapsed" desc="handleSelectPorSolicitado(SelectEvent event) ">

    public void handleSelectPorSolicitado(SelectEvent event) {
        try {

         setSearchAndValue("porsolicitado", solicita);

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

    }// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="handleSelectPorResponsable(SelectEvent event)">

    public void handleSelectPorResponsable(SelectEvent event) {
        try {
            setSearchAndValue("porresponsable", responsable);

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

    }// </editor-fold>

en el método move validamos la condición

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

        }

    }/

Last updated