我成功地从xml文档中填充了一张地图。
现在我正在尝试软化地图。
任何人都知道如何做到这一点。
这是我的速度模板
#set ($root = $context.root)
#set ($nodes = $root.selectNodes("MedicalHIstoryResponse/MedicalResponses"))
#set ($container = {})
#foreach( $node in $nodes )
#set($recordId = $!node.selectSingleNode("recordId/text()").getStringValue())
#set($myHashMap = {
"eventDate": $!node.selectSingleNode("EventDate/text()").getStringValue(),
"eventType": $!node.selectSingleNode("EventType/text()").getStringValue(),
"description": $!node.selectSingleNode("Description/text()").getStringValue(),
"recordId": $recordId,
"parentRecordId": $!node.selectSingleNode("parentRecordId/text()").getStringValue(),
"noofAttachment": $!node.selectSingleNode("noofAttachment/text()").getStringValue(),
"noofLinkFolder": $!node.selectSingleNode("noofLinkFolder/text()").getStringValue(),
"hide": $!node.selectSingleNode("hide/text()").getStringValue(),
"addedBy": $!node.selectSingleNode("addedBy/text()").getStringValue()
})
#set ($discard = $container.put($recordId, $myHashMap))
#end
#foreach($obj in $container)
$obj
#end
答案 0 :(得分:1)
您可以使用TreeMap而不是HashMap。它将按键排序条目。
你需要一个小工具来在VTL中创建空地图(或者你可以使用绝对丑陋的黑客:
#set($dummy="")
#set($container = $dummy.class.forName("java.util.TreeMap").newInstance())
至少用于测试目的)。
答案 1 :(得分:0)
快速解决方案:使用速度排序工具 - 文档here。
#foreach($obj in $sorter.sort($container))
$obj
#end
您需要使用
将排序工具添加到Velocity上下文中VelocityContext velocityContext = new VelocityContext(variableMap);
// now add in the velocity tools required
velocityContext.put("sorter", new SortTool());
更好的解决方案:遵循MVC原则,并在Java代码中完成所有这些工作。除了其他好处之外,这还可以让您灵活地应用自定义排序顺序(Comparator)。请参阅我的其他SO回答here以获得完整的解释和理由。