code: @Override
      public int doAfterBody() throws JspException {
  
          // re-sync the index, given our prior behind-the-scenes 'step'
          index += step - 1;
  
          // increment the count by 1 for each round
          count++;
  
          // everything's been prepared for us, so just get the next item
          if (hasNext() && !atEnd()) {
              index++;
              item = next();
          } else {
              return SKIP_BODY;
          }
  
          /*
           * now discard anything we have to "step" over.
           * (we do this in advance to support LoopTagStatus.isLast())
           */
          discard(step - 1);
  
          // prepare to re-iterate...
          exposeVariables();
          calibrateLast();
          return EVAL_BODY_AGAIN;
      }
docs: Continues the iteration when appropriate -- that is, if we (a) have
  more items and (b) don't run over our 'end' (given our 'step').