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).
Attachments
Attachments
Issue Links
- relates to
-
VELOCITY-658 $velocityHasNext does not work in nested loops
- Closed