<p:autocomplete> con Integer y String
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.avbravo.transporteejb.services;
import com.avbravo.avbravoutils.JsfUtil;
import com.avbravo.transporteejb.entity.Facultad;
import com.avbravo.transporteejb.repository.FacultadRepository;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import org.bson.Document;
/**
*
* @authoravbravo
*/
@Stateless
public class FacultadServices {
@Inject
FacultadRepository facultadRepository;
List<Facultad> facultadList = new ArrayList<>();
public List<Facultad> complete(String query) {
List<Facultad> suggestions = new ArrayList<>();
try {
query = query.trim();
if (query.length() < 1) {
return suggestions;
}
String field = (String) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("field");
if (field.equals("idfacultad")) {
List<Facultad> facultadList = facultadRepository.findAll();
if (!facultadList.isEmpty()) {
for (Facultad f : facultadList) {
if (String.valueOf(f.getIdfacultad()).toLowerCase().startsWith(query.toLowerCase())) {
suggestions.add(f);
}
}
}
} else {
suggestions = facultadRepository.findRegex(field, query, true, new Document(field, 1));
}
} catch (Exception e) {
JsfUtil.errorMessage("complete() " + e.getLocalizedMessage());
}
return suggestions;
}
public List<Facultad> getFacultadList() {
try {
facultadList = facultadRepository.findAll(new Document("facultad", 1));
} catch (Exception e) {
JsfUtil.errorMessage("getFacultadList() " + e.getLocalizedMessage());
}
return facultadList;
}
public void setFacultadList(List<Facultad> facultadList) {
this.facultadList = facultadList;
}
}
list.xhtml
<p:outputLabel value="#{msg['field.facultad']}"/>
<e:autocompletefacultad listener="#{facultadController.handleSelect}"
value="#{facultadController.facultadSelected}"
itemLabel=" #{p.facultad}"
field="facultad"
update=" :form:dataTable"/>
<p:outputLabel value="#{msg['field.idfacultad']}"/>
<e:autocompletefacultad listener="#{facultadController.handleSelect}"
value="#{facultadController.facultadSelected}"
itemLabel=" #{p.idfacultad}"
field="idfacultad"
update=" :form:dataTable"/>
Componente
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<composite:interface >
<composite:attribute name="value" />
<composite:attribute name="itemLabel" />
<composite:attribute name="dropdown" default="false"/>
<composite:attribute name="minQueryLength" default="1"/>
<composite:attribute name="multiple" default="false" />
<composite:attribute name="update" />
<composite:attribute name="rendered"/>
<composite:attribute name="required" default="false" />
<composite:attribute name="field"/>
<composite:attribute name="size" default="25"/>
<composite:attribute name="listener"
method-signature="void handleSelect(org.primefaces.event.SelectEvent)" />
</composite:interface>
<composite:implementation>
<p:autoComplete dropdown="false"
scrollHeight="250"
size="#{cc.attrs.size}"
multiple="#{cc.attrs.multiple}"
emptyMessage="#{app['info.nohayregistros']}"
value="#{cc.attrs.value}"
completeMethod="#{facultadController.facultadServices.complete}"
var="p"
required="#{cc.attrs.required}"
itemLabel="#{cc.attrs.itemLabel}"
itemValue="#{p}"
forceSelection="true">
<f:converter binding="#{facultadConverter}"/>
<f:attribute name="field" value="#{cc.attrs.field}"/>
<f:attribute name="fielddropdown" value="#{cc.attrs.dropdown}"/>
<f:attribute name="fieldquerylenth" value="#{cc.attrs.minQueryLength}"/>
<p:ajax event="itemSelect" listener="#{cc.attrs.listener}"
update="#{cc.attrs.update}" />
<f:facet name="itemtip">
<h:panelGrid columns="1" cellpadding="5">
<h:outputText value="#{msg['field.idfacultad']} #{p.idfacultad}" />
<h:outputText value="#{msg['field.facultad']} #{p.facultad}" />
</h:panelGrid>
</f:facet>
</p:autoComplete>
</composite:implementation>
</html>
CONTROLLER
Método init()
Se debe convertir a Integer el id
Optional<Facultad> optional = facultadRepository.find("idfacultad", Integer.parseInt(id));
@PostConstruct
public void init() {
try {
String action = loginController.get("facultad");
String id = loginController.get("idfacultad");
String pageSession = loginController.get("pagefacultad");
//Search
loginController.put("searchfacultad", "_init");
writable = false;
facultadList = new ArrayList<>();
facultadFiltered = new ArrayList<>();
facultad = new Facultad();
facultadDataModel = new FacultadDataModel(facultadList);
if (id != null) {
Optional<Facultad> optional = facultadRepository.find("idfacultad", Integer.parseInt(id));
if (optional.isPresent()) {
facultad = optional.get();
facultadSelected = facultad;
writable = true;
}
}
if (action != null && action.equals("gonew")) {
facultad = new Facultad();
facultadSelected = facultad;
writable =false;
}
if (pageSession != null)
{
page = Integer.parseInt(pageSession);
}
Integer c = facultadRepository.sizeOfPage(rowPage);
page = page > c ? c : page;
move();
} catch (Exception e) {
JsfUtil.errorMessage("init() " + e.getLocalizedMessage());
}
}// </editor-fold>
Last updated
Was this helpful?