Autocomplete Relacionados con dropdown (Provincia- distrito)

Deseamos seleccionar de un autocomplete que tiene dropdown="true", la provincia y mostrar en otro autocomplete los distritos que pertenecen a esa provincia, en un dropdown.

Se crean los autocomplete en new.xhmtl,view.xhtml

Se debe colocar

dropdown="true"
minQueryLength="0"

y los parametros

<f:attribute name="field" value="provincia"/>
<f:attribute name="fielddropdown" value="true"/>
<f:attribute name="fromstart" value="true"/>
<f:attribute name="fieldminquerylength" value="0"/>
   <p:outputLabel value="#{msg['field.provincia']}"/>


                        <p:autoComplete        
                            scrollHeight="250"   
                            size="35" 
                            emptyMessage="#{app['info.nohayregistros']}" 
                            value="#{clienteController.cliente.provincia}"  
                            completeMethod="#{provinciaController.provinciaServices.complete}"    
                            var="p"
                            dropdown="true"
                            minQueryLength="0"
                            required="true"
                            itemLabel="#{p.provincia}"
                            itemValue="#{p}" 
                            forceSelection="true"> 
                            <f:converter binding="#{provinciaConverter}"/>




                            <f:attribute name="field" value="provincia"/>
                            <f:attribute name="fielddropdown" value="true"/>
                            <f:attribute name="fromstart" value="true"/>
                            <f:attribute name="fieldminquerylength" value="0"/>

                            <p:ajax event="itemSelect" listener="#{provinciaController.handleSelect}"
                                    update="form:distrito :form:corregimiento"  />  
                            <f:facet name="itemtip">
                                <h:panelGrid columns="1" cellpadding="5">

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


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

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


                        <p:autoComplete      
                            id="distrito"
                            scrollHeight="250"   
                            size="35" 
                            emptyMessage="#{app['info.nohayregistros']}" 
                            value="#{clienteController.cliente.distrito}"  
                            completeMethod="#{clienteController.completeDistrito}"    
                            var="p"
                            dropdown="true"
                            minQueryLength="0"
                            required="#{true}"
                            itemLabel="#{p.distrito}"
                            itemValue="#{p}" 
                            forceSelection="true"> 
                            <f:converter binding="#{distritoConverter}"/>
                            <f:attribute name="field" value="distrito"/>
                            <f:attribute name="fielddropdown" value="true"/>
                            <f:attribute name="fieldminquerylength" value="0"/>
                            <f:attribute name="fromstart" value="true"/>



                            <p:ajax event="itemSelect" listener="#{distritoController.handleSelect}"
                                    update="form:corregimiento"
                                    />  
                            <f:facet name="itemtip">
                                <h:panelGrid columns="1" cellpadding="5">
                                    <h:outputText value="#{msg['field.distrito']} #{p.distrito}" />


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



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

                        <p:autoComplete   
                            id="corregimiento"
                            scrollHeight="250"   
                            size="35" 
                            emptyMessage="#{app['info.nohayregistros']}" 
                            value="#{clienteController.cliente.corregimiento}"  
                            completeMethod="#{clienteController.completeCorregimiento}"    
                            var="p"
                            dropdown="true"
                            minQueryLength="0"
                            required="#{true}"
                            itemLabel="#{p.corregimiento}"
                            itemValue="#{p}" 
                            forceSelection="true"> 
                            <f:converter binding="#{corregimientoConverter}"/>
                            <f:attribute name="field" value="corregimiento"/>
                            <f:attribute name="fielddropdown" value="false"/>
                            <f:attribute name="fieldminquerylength" value="0"/>
                            <f:attribute name="fromstart" value="true"/>

                            <f:facet name="itemtip">
                                <h:panelGrid columns="1" cellpadding="5">

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


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

Controller

ProvinciaServices.Java

El de provincia que es el principal se puede obtener del Services.

@Stateless
public class ProvinciaServices {

    @Inject
    ProvinciaRepository repository;
List<Provincia> provinciaList = new ArrayList<>();
    public List<Provincia> complete(String query) {
        List<Provincia> suggestions = new ArrayList<>();
          try {
          suggestions=repository.complete(query);
        } catch (Exception e) {
            JsfUtil.errorMessage("complete() " + e.getLocalizedMessage());
        }

        return suggestions;
    }

ClienteController.java

Implementamos el autocomplete filtrando ademàs del query por provincia.idprovincia.

  // <editor-fold defaultstate="collapsed" desc="completeDistrito()>
    public List<Distrito> completeDistrito(String query) {
        List<Distrito> suggestions = new ArrayList<>();

        try {

            query = query.trim();          

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

        } catch (Exception e) {
            JsfUtil.errorMessage("completeDistrito() " + e.getLocalizedMessage());
        }
        return suggestions;
    }  // </editor-fold>

Last updated