# Autocomplete relacionados

## Autocomplete relacionados

## CON FINDREGEXT CON PARAMETROS

### Ejemplo de autocompletes relacionados con findRegex()

El autocomplete distrito depende al autocomplete provincia

![](https://2578941663-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6ze2c8GK7mFBZX%2F-Lc1WjGeqF4Ig-44ZLgX%2F-Lc1X6BEkIb9Y1KH5tMr%2F08081189-adc3-4808-9bc1-3f3d0861ff23.png?generation=1554820659253072\&alt=media)

**Crear los autocomplete**

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

```java
<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.

```java
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.

## ![](https://2578941663-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6ze2c8GK7mFBZX%2F-Lc1WjGeqF4Ig-44ZLgX%2F-Lc1X6BHMHWy3Ouw85jz%2F1d019844-e0a3-4b39-a0e9-10bb71572699.png?generation=1554820659168665\&alt=media)

### 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.

```java
  <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>
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://avbravo-2.gitbook.io/trucosjakartaee/overview/java-server-faces/autocomplete/autocomplete-relacionados.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
