2014-01-09 57 views
0

任何人可以建议如何在速度排序此列表?速度foreach排序列表

到目前为止,我试过

#foreach($it in ${pro.test}.sort(${pro.test.sortOrder})) 
    ......... 
    #end 

但它抛出的错误,我也试图与

#foreach($it in ${pro.test.sort(${pro.test.sortOrder})}) 
    ......... 
    #end 

这一次没有错误,但控制循环的内部来,

reference

+0

什么类型的对象是'pro.test'? –

+0

@Sergiu Dumitriu感谢您的回应,它是一套。此外,我尝试使用$ sorter.sort()函数以及您能否告诉我出错的地方 –

回答

2

首先,使用${...}是一种帮助t他速度分析器确切地知道你认为是速度代码。通常情况下,当速度看到$something.somethingElse.somethingMore时,它会尝试尽可能地进行解析,直到看到单词中断字符为止,例如空格或逗号。当它看到${something.somethingElse}.somethingMore时,它只会读取,直到匹配}作为实际代码,其余为纯文本。这意味着${pro.test}.sort(...).sort(...)视为应该打印的纯文本,因此它不会将其称为方法。这就是为什么第一个例子失败并出现错误。您只需要使用正式的外部语法指令,但只要在#foreach(...)中删除呼叫中的所有{}即可。

其次,#foreach非常宽松,当您尝试在迭代范围内传递无效的东西时,它不会抱怨;如果它没有解析成一个有效的列表,那么它只是忽略它,并认为没有什么可以迭代。当某些东西不能按预期工作时,打印出您正在使用的值:

$pro.test $pro.test.class $pro.test.sortOrder $pro.test.sortOrder.class 
#foreach ($it in ${pro.test.sort(${pro.test.sortOrder})}) 
    ... 
#end 

这是什么打印? $pro.test真的是一套吗?是$pro.test.sortOrder有效的排序顺序规范,如预期的SortTool

如果$pro.testSet interface的标准实施方式,则没有sortsortOrder方法。假设速度SortTool$sorter变量下可用,你可以尝试,对于初学者:

#foreach ($it in $sorter.sort($pro.test)) 
    ... 
#end 

现在,究竟是$pro.test.sortOrder应该是什么?如果它是一个属性,请注意,出于安全原因,Velocity不允许直接访问属性,它只能调用方法。作为简化语法的手段,$pro.test.sortOrder实际上会尝试调用其中的一个:getsortOrder(),getSortOrder(),get("sortOrder"),issortOrder(), isSortOrder()

+0

非常感谢您为我的解释和时间所作的努力。我会尽快检查您的代码。 –