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