Re: "While"-like structure in Velocity?
Sergiu Dumitriu <[email protected]>
| Newsgroups | gmane.comp.jakarta.velocity.user |
|---|---|
| Message-ID | <[email protected]> |
On 05/15/2013 12:11 PM, Christopher Schultz wrote:
> All,
>
> I've searched the archives for "while" capabilities in Velocity, and
> mostly the answers have been things like "that's beyond the scope of
> Velocity... you want a real programming language for that".
>
> I'd like to do something that naturally would use a while loop, but
> perhaps someone can offer an alternative suggestion.
>
> I need to traverse a queue, but that queue needs to be able to modify
> itself during the processing. Basically, something like this:
>
> while (!queue.empty) {
> // do something with the head element
> // possible enqueue some more items at the back
> }
>
> #foreach would be the way to do it if the queue didn't have to be
> modified, but I'll get an exception if I try to traverse an iterator
> over the queue and then modify it mid-flight.
>
> Right now, I have this written as a JSP but I'd rather have it as a
> Velocity template.
>
> My only thought is to create an ugly class that implements Iterator and
> wraps the queue but is much less strict than a standard iterator. Any
> suggestions?
>
> -chris
>
While not a very clean solution, you can use a very large foreach and
manually work with the queue inside the loop, and #break($foreach) once
the queue is empty:
#foreach($i in [0..100000])
#if ($queue.isEmpty())
#break($foreach)
#end
#set ($item = $queue.pop())
## Do stuff with $item
#if (should add more things)
#set ($discard = $queue.add(new things))
#end
#end
--
Sergiu Dumitriu
http://purl.org/net/sergiu