Autocomplete relacionados

Autocomplete relacionados

CON FINDREGEXT CON PARAMETROS

Ejemplo de autocompletes relacionados con findRegex()

El autocomplete distrito depende al autocomplete provincia

Crear los autocomplete

  • El segundo autocomplete el método complete se personaliza en el controller

<p:outputLabel value="#{msg['field.provincia']}"/>
         <p:autoComplete     dropdown="false"    
                                   scrollHeight="250"   
                                          size="35" 
                           emptyMessage="#{app['info.nohayregistros']}" 
                                     value="#{fiadorController.fiador.provincia}"  
                                      completeMethod="#{provinciaController.provinciaServices.complete}"    
                                var="p"
                                            required="true"
                                            itemLabel="#{p.provincia}"
                                            itemValue="#{p}" 
                                            forceSelection="true"> 
                            <f:converter binding="#{provinciaConverter}"/>                            
                            <f:attribute name="field" value="provincia"/>
                            <f:attribute name="fielddropdown" value="false"/>
            <f:attribute name="fieldquerylenth" value="1"/>
                            <p:ajax event="itemSelect" listener="#{provinciaController.handleSelect}"
                                    update="form:"  />  
                            <f:facet name="itemtip">
                                <h:panelGrid columns="1" cellpadding="5">

                                    <h:outputText value="#{msg['field.provincia']} #{p.provincia}" />
                                    <h:outputText value="#{msg['field.idprovincia']} #{p.idprovincia}" />

                                </h:panelGrid>
                            </f:facet>
                        </p:autoComplete>  

                        <p:outputLabel value="#{msg['field.distrito']}"/>


                        <p:autoComplete     dropdown="false" 
                                            id="distrito"
                                            scrollHeight="250"   
                                            size="25" 
                                            emptyMessage="#{app['info.nohayregistros']}" 
                                            value="#{fiadorController.fiador.distrito}"  
                                            completeMethod="#{fiadorController.completeDistrito}"    
                                            var="p"
                                            required="#{true}"
                                            itemLabel="#{p.distrito}"
                                            itemValue="#{p}" 
                                            forceSelection="true"> 
                            <f:converter binding="#{distritoConverter}"/>
                            <f:attribute name="field" value="distrito"/>
                            <f:attribute name="fielddropdown" value="false"/>
                            <f:attribute name="fieldquerylenth" value="1"/>
                            <p:ajax event="itemSelect" listener="#{distritoController.handleSelect}"
                                    />  
                            <f:facet name="itemtip">
                                <h:panelGrid columns="1" cellpadding="5">

                                    <h:outputText value="#{msg['field.distrito']} #{p.distrito}" />
                                    <h:outputText value="#{msg['field.iddistrito']} #{p.iddistrito}" />
                                    <h:outputText value="#{msg['field.provincia']} #{p.provincia.provincia}" />

                                </h:panelGrid>
                            </f:facet>
                        </p:autoComplete>

Segmento Controller

  • En el parámetro adicional colocamos el documento referenciado.

public List<Distrito> completeDistrito(String query) {
            List<Distrito> suggestions = new ArrayList<>();

        try {
          JsfUtil.testMessage("provincia "+fiador.getProvincia().getIdprovincia());
            query = query.trim();
            if (query.length() < 1) {
                return suggestions;
            }

            suggestions = distritoRepository.findRegex("distrito", query, true, "provincia.idprovincia",fiador.getProvincia().getIdprovincia(),new Document("distrito", 1));


        } catch (Exception e) {
            JsfUtil.errorMessage("completeDescripcion() " + e.getLocalizedMessage());
        }
        return suggestions;
    }

OTRO EJEMPLO

Queremos mostrar autocomplete de modelo en base al grupo seleccionado.

En el controller

Crear el método para hacer la búsqueda por Regex e incorporamos un filtro en base al grupo de articulo seleccionado

public List<Modelo> completeDescripcionAndModelo(String query) {
        List<Modelo> suggestions = new ArrayList<>();
        List<Modelo> result = new ArrayList<>();
           try {
               query = query.trim();
               if (query.length() < 1) {
                   return suggestions;
               }   
               suggestions=  modeloFacade.findRegex("descripcion",query,true,new Document("descripcion",1));

               for(Modelo m:suggestions){
                   if(m.getGrupoarticulo().getIdgrupoarticulo().equals(grupoarticuloSelected.getIdgrupoarticulo())){
                       result.add(m);
                   }
               }

           } catch (Exception e) {
                    JsfUtil.errorMessage("completeDescripcion() " + e.getLocalizedMessage());
           }
           return result;
    }

En el xhtml

Indicamos que use el método del controller para hacer el autocomplete.

  <p:outputLabel class="col-xs-2 col-form-label" value="#{msg['field.grupoarticulo']}"/>
              <div class="col-xs-4">

             <p:autoComplete scrollHeight="250" dropdown="false" size="50"
               emptyMessage="#{app['info.nohayregistros']}"
               title="#{app['info.by']} #{msg['field.descripcion']}"
              label="#{app['info.by']} #{msg['field.descripcion']}"
                     rendered="#{articuloController.writable}"
                     alt="#{msg['info.searchby']} #{msg['field.descripcion']}"
                value="#{articuloController.grupoarticuloSelected}"
                   completeMethod="#{articuloController.grupoarticuloServices.completeDescripcion}"
                      var="p" itemLabel="#{p.descripcion}" itemValue="#{p}" forceSelection="true"> 
                <f:converter binding="#{grupoarticuloConverter}"/>
                <f:attribute name="field" value="descripcion"/>
<f:attribute name="fieldquerylenth" value="1"/>
<f:attribute name="fielddropdown" value="false"/>
<f:attribute name="fieldquerylenth" value="1"/>
                 <p:ajax event="itemSelect" listener="#{articuloController.handleSelectGenerarDescripcion}"
                           update=" :form:msgs,:form:descripcion , :form:idarticulo" />  
                      <f:facet name="itemtip">
                              <h:panelGrid columns="1" cellpadding="10">
                                   <h:outputText value="#{p.descripcion}" />
                               <h:outputText value="#{p.idgrupoarticulo}" />
                           </h:panelGrid>
                          </f:facet>
                       </p:autoComplete>
                   </div>
                </div>


          <div class="form-group row" >

               <p:outputLabel class="col-xs-2 col-form-label" value="#{msg['field.modelo']}"/>
                 <div class="col-xs-4">

                    <p:autoComplete scrollHeight="250" dropdown="false" size="45"
                                  emptyMessage="#{app['info.nohayregistros']}"
                           title="#{app['info.by']} #{msg['field.descripcion']}"
                                    label="#{app['info.by']} #{msg['field.descripcion']}"
                               rendered="#{articuloController.writable}"
                                   alt="#{msg['info.searchby']} #{msg['field.descripcion']}"
                                      value="#{articuloController.modeloSelected}"
                               completeMethod="#{articuloController.completeDescripcionAndModelo}"
                           var="p" itemLabel="#{p.descripcion}" itemValue="#{p}" forceSelection="true"> 
                        <f:converter binding="#{modeloConverter}"/>
               <p:ajax event="itemSelect" listener="#{articuloController.handleSelectGenerarDescripcion}"
                                update=" :form:msgs,:form:descripcion , :form:idarticulo" /> 
                                     <f:facet name="itemtip">
                                   <h:panelGrid columns="1" cellpadding="5">
                                     <h:outputText value="#{p.descripcion}" />
                                <h:outputText value="#{p.idmodelo}" />
                      <h:outputText value="#{msg['field.grupoarticulo']} #{p.grupoarticulo.descripcion}" />
                        </h:panelGrid>
                      </f:facet>
                     </p:autoComplete>
    </div>
    </div>

Last updated