You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by "Michael Parmeley (JIRA)" <de...@velocity.apache.org> on 2009/11/13 15:35:39 UTC
[jira] Commented: (VELOCITY-657) $velocityHasNext not working
properly (returns true even if iterator does not have next value)
[ https://issues.apache.org/jira/browse/VELOCITY-657?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12777514#action_12777514 ]
Michael Parmeley commented on VELOCITY-657:
-------------------------------------------
I am using velocity 1.6.2 and this is still occuring. Using $velocityHasNext does not work in nested loops.
For example:
I have: #foreach(${column} in ${columns})${column.columnName}#if(${velocityHasNext}),#end#end
However, if I have two columns named "foo" and "bar" this is resulting in "foobar". If I change the condition in the if statment to something cheesy like (3 > 2) then the expected results of "foo,bar" is generated.
So the $velocityHasNext is still not working in velocity 1.6.2.
I have this property in my velocity.properties:
directive.foreach.iterator.name = velocityHasNext
> $velocityHasNext not working properly (returns true even if iterator does not have next value)
> ----------------------------------------------------------------------------------------------
>
> Key: VELOCITY-657
> URL: https://issues.apache.org/jira/browse/VELOCITY-657
> Project: Velocity
> Issue Type: Bug
> Components: Engine
> Affects Versions: 1.6
> Reporter: Dominik Marks
> Priority: Minor
> Fix For: 1.6.2, 1.7
>
> Attachments: velocity-657-testcase.patch
>
>
> 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).
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org