Hi,
is suspect the depth of your construct is variable. Here some basic programming
apporaches (untested code):
Recursive solution:
#macro( process $foo )
#set( $bar = $foo )## dereference (was needed in Velociry 1.4, don't know if
1.6 still needs this)
#foreach( $baz in $bar.list )
## do something sensible:
here we are: $baz.s
## plunge into the recursion
#if( $baz.list )#process( $baz )#end
#end
#end
## call the macro on the root
#process($root)
Non-recursive solution. Since Velocity does not provide a #while directove, I
suggest you try to use an ArrayList as stack; it will work if the iterator
picks up added elements (to my knowledge it does):
#set( $list = [] )## create an empty ArrayList (performance might be better
with a LinkedList or Stack)
$list.add($root)## add root element
#foreach( $baz in $list )
## do something sensible:
here we are: $baz.s
#if( $baz.list )
## insert children at the current list position
$list.addAll($velocityCount, $baz.list)
## in case $bar.list is not of List interface, you will need a macro to
loop and add each individual
## you might need to adjust $velocityCount by one to insert at the right
position...
#end
## now the magic should happen, the foreach iterator should pick up the
children...
#end
Hope this helped,
Christoph
Paul M wrote:
> If I have a java object that contains a list, which in turn can contain a
> list...
> How would one go about iterating through this list within Velocity,
> recursively, if possible?
>
> class A
> has a STRING s;
> and a list of class A objects;
>
> Is there a non-recursive solution?
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]