// Evaluate the body and add the data for the first vector element
 // to the bodyContent object.
 @Override
 public void doInitBody() {
   count = 0;
   product = (Product) products.get(count);
   pageContext.setAttribute("code", product.getCode());
   pageContext.setAttribute("description", product.getDescription());
   double price = product.getPrice();
   String priceAsString = currency.format(price);
   pageContext.setAttribute("price", priceAsString);
   count++;
 }
 @Override
 public int doAfterBody() throws JspException {
   try {
     if (count < products.size()) {
       product = (Product) products.get(count);
       pageContext.setAttribute("code", product.getCode());
       pageContext.setAttribute("description", product.getDescription());
       pageContext.setAttribute("price", currency.format(product.getPrice()));
       count++;
       return EVAL_BODY_AGAIN;
     } else {
       JspWriter out = bodyContent.getEnclosingWriter();
       bodyContent.writeOut(out);
       return SKIP_BODY;
     }
   } catch (IOException ioe) {
     System.err.println("IOException doAfterBody: " + ioe);
     return SKIP_BODY;
   }
 }