"The doAfterBody() does the same as doStartTag(), except that it doesn't initialize the Iterator."
why not after you initialize the Iterator in doStartTag() say "return doAfterBody();"
of course at it is it will work but why specify something twice?