Autocomplete relacionados
Last updated
Was this helpful?
Last updated
Was this helpful?
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;
}
Queremos mostrar autocomplete de modelo en base al grupo seleccionado.
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;
}
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>