protected void encodeItems(
      FacesContext facesContext, UIComponent component, List<Object> fetchValues)
      throws IOException {
    AbstractAutocomplete comboBox = (AbstractAutocomplete) component;
    AutocompleteEncodeStrategy strategy = getStrategy(component);
    strategy.encodeItemsContainerBegin(facesContext, component);

    Object savedVar = saveVar(facesContext, comboBox.getVar());
    Map<String, String> requestParameters =
        facesContext.getExternalContext().getRequestParameterMap();
    String value = requestParameters.get(component.getClientId(facesContext) + "Value");
    Iterator<Object> itemsIterator = comboBox.getItems(facesContext, value).iterator();

    if (!itemsIterator.hasNext()) {
      strategy.encodeFakeItem(facesContext, component);
    } else {
      while (itemsIterator.hasNext()) {
        Object item = itemsIterator.next();

        setVar(facesContext, comboBox.getVar(), item);
        this.encodeItem(facesContext, comboBox, item, strategy);

        if (comboBox.getFetchValue() != null) {
          fetchValues.add(comboBox.getFetchValue().toString());
        } else if (item != null) {
          fetchValues.add(item.toString());
        }
      }
    }

    setVar(facesContext, comboBox.getVar(), savedVar);

    strategy.encodeItemsContainerEnd(facesContext, component);
  }
 protected void encodeItemsContainer(FacesContext facesContext, UIComponent component)
     throws IOException {
   AutocompleteEncodeStrategy strategy = getStrategy(component);
   AutocompleteMode mode = (AutocompleteMode) component.getAttributes().get("mode");
   if (mode != null && mode == AutocompleteMode.client) {
     List<Object> fetchValues = new ArrayList<Object>();
     this.encodeItems(facesContext, component, fetchValues);
     this.encodeFetchValues(facesContext, component, fetchValues);
   } else {
     strategy.encodeItemsContainerBegin(facesContext, component);
     // TODO: is it needed
     // strategy.encodeFakeItem(facesContext, component);
     strategy.encodeItemsContainerEnd(facesContext, component);
   }
 }
 public void encodeItem(
     FacesContext facesContext,
     AbstractAutocomplete comboBox,
     Object item,
     AutocompleteEncodeStrategy strategy)
     throws IOException {
   ResponseWriter writer = facesContext.getResponseWriter();
   if (getLayoutChildCount(comboBox) > 0) {
     strategy.encodeItem(facesContext, comboBox);
   } else {
     if (item != null) {
       strategy.encodeItemBegin(facesContext, comboBox);
       writer.writeAttribute(
           HtmlConstants.CLASS_ATTRIBUTE, "rf-au-itm rf-au-opt rf-au-fnt rf-au-inp", null);
       writer.writeText(item, null);
       strategy.encodeItemEnd(facesContext, comboBox);
     }
   }
 }