code: private boolean doRepeaterAfterBody()
              throws JspException
      {
          switch (_repCurStage.getValue()) {
              case RepeatingStages.INT_BEFORE:
                  if (!moveNext())
                      return false;
                  return doRepeaterAfterBody();
              case RepeatingStages.INT_OPTION:
                  assert (_repeaterIterator instanceof Iterator);
                  while (_repeaterIterator.hasNext()) {
                      _repCurItem = _repeaterIterator.next();
                      if (_repCurItem != null) {
                          _optionList.add(_repCurItem);
                          return true;
                      }
                  }
                  if (!moveNext())
                      return false;
                  return doRepeaterAfterBody();
  
              case RepeatingStages.INT_DEFAULT:
              case RepeatingStages.INT_DATASOURCE:
              case RepeatingStages.INT_NULL:
                  assert (_repeaterIterator instanceof Iterator);
                  while (_repeaterIterator.hasNext()) {
                      _repCurItem = _repeaterIterator.next();
                      if (!_optionList.contains(_repCurItem)) {
                          _optionList.add(_repCurItem);
                          return true;
                      }
                  }
                  if (!moveNext())
                      return false;
                  return doRepeaterAfterBody();
          }
          return false;
      }
docs: This method will side affects the <code>_repCurItem</code> to insure that it
  is set to the next item in the iteration set.  It will return <code>true</code>
  if there is a next item, and <code>false</code> when we are done with the iteration
  @return returns <code>true</code> when <code>_repCurItem</code> contains the next item and
  <code>false</code> when we are done.
  @throws JspException