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]

Reply via email to