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

Posted

技术标签:

【中文标题】在 VTL 中对字符串数组进行排序【英文标题】:Sorting an array of strings in VTL 【发布时间】:2012-10-07 06:04:34 【问题描述】:

主要是 VB.NET 程序员,我对 VTL(速度模板语言)非常陌生。我目前正在尝试自定义使用 Velocity 模板和 Jython 的应用程序。

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

<table class="meta">
    #set($keySet = $metadata.getJsonObject().keySet())
    #foreach($key in $keySet)
    <tr>
        <th >$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】:

首先要检查的是您是否已将 SortTool 添加到速度上下文中,使用如下代码:

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

话虽如此,最佳实践是在 Java 代码中而不是在模板逻辑中完成此类工作。查看我的回答here了解更多详情和原因。

【讨论】:

以上是关于在 VTL 中对字符串数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在iOS中对包含数字和名称的字符串数组进行排序

如何在 Java 中对对象数组进行排序?

在 C++ 中对字符串数组进行排序,无论是“A”还是“a”以及 å、ä ö?

在没有排序函数的数组中对字符串进行排序 - Ruby

在 awk 中对哈希/数组进行排序