Velocity
  1. Velocity
  2. VELOCITY-657

$velocityHasNext not working properly (returns true even if iterator does not have next value)

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 1.6
    • Fix Version/s: 1.6.2, 1.7
    • Component/s: Engine
    • Labels:
      None

      Description

      Using the new "velocityHasNext" feature in loops does not work as expected.

      When using the following excerpt:

      #foreach ($value in $element.values)
      $value
      #if( $velocityHasNext )
      SEPARATOR
      #end
      #end

      and having $element.values as e.g. "test1", "test2", "test3"

      I get

      test1 SEPARATOR test2 SEPARATOR test3 SEPARATOR

      but I would expect

      test1 SEPARATOR test2 SEPARATOR test3

      When looking into the source code, I see the following in org.apache.velocity.runtime.directive.Foreach.render():

      while (!maxNbrLoopsExceeded && i.hasNext())
      {
      // TODO: JDK 1.5+ -> Integer.valueOf()
      put(context, counterName , new Integer(counter));
      put(context, hasNextName, Boolean.valueOf(i.hasNext()));
      Object value = i.next();
      put(context, elementKey, value);
      ....
      }

      Isn't this the wrong order of instructions?

      I would expect:

      Object value = i.next();
      put(context, hasNextName, Boolean.valueOf(i.hasNext()));

      So that the $velocityHasNext variable will be filled with the "hasNext" of the follow-up iteration and not with the "hasNext" of the current iteration (which will always be true, otherwise the loop has finished before).

        Issue Links

          Activity

          No work has yet been logged on this issue.

            People

            • Assignee:
              Unassigned
              Reporter:
              Dominik Marks
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development