在简单的Velocity报告中实现递归

时间:2019-06-10 13:20:29

标签: java recursion apache-velocity

我正在生成速度报告。我目前正在遍历文档(ID)的集合,对于每个文档,我都可以获得关系列表。

我想为每个这些ID调用相同的函数,以查看是否存在进一步的关系:

我考虑了一个while循环,但后来发现不支持该循环。

## Loop through the selection of documents
#foreach( $vDoc in $documentList )

## for each document obtain a list of all upostream relationships
#foreach($h1 in $relDao.getUpstreamDocumentIds($vDoc.document.id))

## Need recursion in here....
## need to keep getting the upstream IDs until the size is zero and then return that ID

#end
#end

1 个答案:

答案 0 :(得分:0)

这是一种实现速度递归的方法。 我们可以利用宏,定义宏并与基本情况一起递归使用

相同的代码段。根据要求进行修改。

## ***Call the macro for the first time***
#reportMacro($documentList) 

## ***This is the definition of the macro***
#macro(reportMacro $documentList)
{    
    ## Loop through the selection of documents
    #foreach( $vDoc in $documentList )

        ## for each document obtain a list of all upostream relationships
        #foreach($h1 in $relDao.getUpstreamDocumentIds($vDoc.document.id))
            #if("$h1" != ""  && ${h1.size()} > 0)
                ## ***Recursively call the macro ***
                #reportMacro($h1)
            #else
                this marks end of recursion do some operations here if needed ... 
            #end
        #end
    #end
}
#end