在VTL中对字符串数组进行排序

时间:2012-10-17 03:14:16

标签: arrays sorting velocity vtl

作为一名VB.NET程序员,我对VTL(Velocity Template Language)非常陌生。我目前正在尝试自定义使用Velocity模板和Jython的应用程序。

我在现有文件中有以下VTL代码。此代码从JSON文件中获取一些键值对,并在一个简洁的表中将它们输出到浏览器:

<table class="meta">
    #set($keySet = $metadata.getJsonObject().keySet())
    #foreach($key in $keySet)
    <tr>
        <th width="25%">$parent.getFriendlyName($key)</th>
        <td>
            #set($valueList = $metadata.getList($key))
            #if($valueList.size() > 1)
                #foreach($value in $valueList)
                    <span class="meta-value">$self.escape($value)</span><br/>
                #end
            #else
                $self.escape($valueList.get(0))
            #end
        </td>
    </tr>
    #end
</table>

我可以显示$ keySet数组:

[field1, field2, field3, field4]

我尝试做的是按字母顺序对$ keySet数组中的字符串进行排序。

我尝试通过更改

来使用SortTool(http://velocity.apache.org/tools/devel/javadoc/org/apache/velocity/tools/generic/SortTool.html
#foreach($key in $metadata.getJsonObject().keySet())

#foreach($key in $sorter.sort($metadata.getJsonObject().keySet()))

但sort()函数返回的数组为空。

另外,我认为http://www.liferay.com/community/forums/-/message_boards/message/11146823中列出的解决方案并不适用,因为我不打算对子字段进行排序。

任何建议都将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

要检查的第一件事是你是否已将SortTool添加到速度上下文中,使用如下代码:

VelocityContext velocityContext = new VelocityContext();
velocityContext.put("sorter", new SortTool());

话虽如此,最佳做法是在Java代码中进行此类工作,而不是在模板逻辑中。有关详细信息和原因,请参阅我的回答here