Autocomplete Relacionados con dropdown (Provincia- distrito)
Last updated
Was this helpful?
Last updated
Was this helpful?
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.
Un vista como esta
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>
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;
}
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>