<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