1 Reply Latest reply on Oct 21, 2011 7:28 AM by Vitaly Neganov

    Autocomplete prefix

    Enrico Baudolino Newbie

      Hi all.

       

      I'm testing the autocomplete component, but I don't understand how prefix (used as search input) is passed to the bean.

      Here my code:

      page:

       

      <!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:ui="http://java.sun.com/jsf/facelets"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:a4j="http://richfaces.org/a4j"
          xmlns:rich="http://richfaces.org/rich"
          xmlns:t="http://myfaces.apache.org/tomahawk">
      
      <f:loadBundle basename="resources.application" var="msg" />
      
      <h:head>
          <title>Test page
          </title>
      </h:head>
      
      <h:body>
          <rich:panel style="height:500px;overflow:auto">
      
               <rich:autocomplete mode="cachedAjax" tokens=", " minChars="1"
                  autofill="false"
                  autocompleteMethod="#{comuniBean.autocomplete}" />
      
      
          </rich:panel>
      
      
      </h:body>
      </html>
      
      

       

      Bean:

       

      package it.ubi.test.bean;
      
      import java.io.Serializable;
      import java.util.ArrayList;
      import java.util.Iterator;
      import java.util.List;
      
      public class ComuniBean implements Serializable{
      
          private static final long serialVersionUID = 1L;
          
          private ArrayList<String> comuniList;
      
          public void init() {
              comuniList = new ArrayList<String>();
              comuniList.add("Brescia (BS)");
              comuniList.add("Milano (MI)");
              comuniList.add("Bergamo (BG)");
          }
      
          public List<String> autocomplete(String prefix) {
              ArrayList<String> result = new ArrayList<String>();
              if ((prefix == null) || (prefix.length() == 0)) {
                      comuniList = new ArrayList<String>();
                      comuniList.add("Brescia (BS)");
                      comuniList.add("Milano (MI)");
                      comuniList.add("Bergamo (BG)");
                      result = comuniList;
              } else {
                  Iterator<String> iterator = comuniList.iterator();
                  while (iterator.hasNext()) {
                      String elem = iterator.next();
                      if ((elem.toLowerCase().indexOf(prefix.toLowerCase()) == 0)
                          || "".equals(prefix)) {
                          result.add(elem);
                      }
                  }
              }
              return result;
          }
      
      
          }
      

       

      I copied autocomplete example.

      If I debug this code, the "prefix" variable is always null.

      Bean is correctly mapped, tested using the autocompleteList param.

       

      Many thanks,

      Enrico