2012-10-17 134 views
1

作爲一名VB.NET程序員,我對VTL(速度模板語言)非常陌生。我目前正在試圖定製一個使用Velocity模板和Jython的應用程序。對VTL中的字符串數組進行排序

我在現有的文件中有以下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數組中的字符串進行排序。

我試圖通過改變

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

使用SortTool(http://velocity.apache.org/tools/devel/javadoc/org/apache/velocity/tools/generic/SortTool.html)至

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

而是由sort()函數返回的數組爲空。

此外,我不認爲http://www.liferay.com/community/forums/-/message_boards/message/11146823中列出的解決方案是適用的,因爲我不想在兒童領域排序。

任何意見將不勝感激。提前致謝。

回答

0

檢查的第一件事是,如果你已經添加SortTool的速度範圍內,使用如下代碼:

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

話雖如此,最好的做法是做這種工作的Java代碼,而不是在模板邏輯。有關更多詳情和原因,請參閱我的回答here

相關問題