autocomplete insertar nuevos valores

Video:

https://youtu.be/BOph1UwDass

Permite insertar un elemento nuevo , simplemente escribimos el nombre y damos dos espacios al final ,como no existe este se guarda en la base de datos y se muestra como parte de la selección.

Quedara guardado en la base de datos.

Services

@Stateless
public class LugaresServices {

    @Inject
    LugaresRepository repository;
 @Inject
   SolicitudRepository solicitudRepository;
    List<Lugares> lugaresList = new ArrayList<>();

    public List<Lugares> complete(String query) {
        List<Lugares> suggestions = new ArrayList<>();
           try {
          suggestions=repository.complete(query);
        } catch (Exception e) {
            JsfUtil.errorMessage("complete() " + e.getLocalizedMessage());
        }

        return suggestions;
    }
    /**
     * Se usa para ingresar mediante el autocomplete si no existe
     * el usuario da un espacio en blanco con la barra para que este se inserte en la base de datos
     * @param query
     * @return 
     */
    public List<Lugares> completeWithInsert(String query) {
        List<Lugares> suggestions = new ArrayList<>();
           try {
          
          suggestions=repository.complete(query);
          if(suggestions == null || suggestions.isEmpty()){
              if (JsfUtil.totalEspaciosAlfinalCadena(query)>=2){
                  Lugares lugares = new Lugares();
                  lugares.setActivo("si");
                  lugares.setIdlugares(query.trim());
                   Usuario jmoordb_user = (Usuario) JmoordbContext.get("jmoordb_user");
                  lugares = repository.addUserInfoForSaveMethod(lugares, jmoordb_user.getUsername(), "create from autocomplete");
                  repository.save(lugares);
              }
               suggestions= completeWithInsert(query.trim());
          }
        } catch (Exception e) {
            JsfUtil.errorMessage("completeWithInsert() " + e.getLocalizedMessage());
        }

        return suggestions;
    }

    public List<Lugares> getLugaresList() {
        try {
            lugaresList = repository.findAll(new Document("idlugares", 1));
        } catch (Exception e) {
            JsfUtil.errorMessage("getLugaresList() " + e.getLocalizedMessage());
        }

        return lugaresList;
    }

    public void setLugaresList(List<Lugares> lugaresList) {
        this.lugaresList = lugaresList;
    }
    
        // <editor-fold defaultstate="collapsed" desc="isDeleted(Lugares lugares)">
  
    public Boolean isDeleted(Lugares lugares){
        Boolean found=false;
        try {
            Document doc = new Document("lugares.idlugares",lugares.getIdlugares());
            Integer count = solicitudRepository.count(doc);
            if (count > 0){
                return false;
            }
            
        } catch (Exception e) {
             JsfUtil.errorMessage("isDeleted() " + e.getLocalizedMessage());
        }
        return true;
    }  // </editor-fold>
    
    
    // <editor-fold defaultstate="collapsed" desc="findById(Integer id)">

    public Lugares findById(String id){
           Lugares lugares = new Lugares();
        try {
         
            lugares.setIdlugares(id);
            Optional<Lugares> optional = repository.findById(lugares);
            if (optional.isPresent()) {
               return optional.get();
            } 
        } catch (Exception e) {
             JsfUtil.errorMessage("findById() " + e.getLocalizedMessage());
        }
      
      return lugares;
    }
    // </editor-fold>

}

Controller

    @Inject
    LugaresServices lugaresServices;

Componente

 
 <p:outputLabel value="#{msg['field.idlugares']}"/>


 <jmoordbjsf:autocomplete converter="#{lugaresConverter}"
             completeMethod="#{solicitudDocenteController.lugaresServices.completeWithInsert}"
             labeltip1="#{msg['field.idlugares']} #{p.idlugares}" 
             listener="#{solicitudDocenteController.handleAutocompleteOfListXhtml}"
              value="#{solicitudDocenteController.lugaresLlegada}"
              itemLabel=" #{p.idlugares}"
              field="idlugares"
              dropdown="true"
              size="50"
              minQueryLength="0"
              update=""/>
  <p:spacer/>
 <p:staticMessage severity="info" summary="INFO!" detail="Si es un lugar nuevo de dos espacio al final para agregarlo!" />

Last updated