54

Can you do something like this in a velocity template?

#set ($map = $myobject.getMap() )
#foreach ($mapEntry in $map.entrySet())
    <name>$mapEntry.key()</name>
    <value>$mapEntry.value()</value>
#end

it outputs blank tags like so:

<name></name> 

and

<value></value> 

What am I doing wrong?

StormeHawke
  • 5,987
  • 5
  • 45
  • 73
Ayrad
  • 3,996
  • 8
  • 45
  • 86

4 Answers4

126

Your mistake is referring to key and value as methods (with trailing "()" parenthesis) instead of as properties. Try this:

#set ($map = $myobject.getMap() )
#foreach ($mapEntry in $map.entrySet())
    <name>$mapEntry.key</name>
    <value>$mapEntry.value</value>
#end

In other words, use either a property, like mapEntry.key, or the method, like mapEntry.getKey().

Yoni
  • 10,171
  • 9
  • 55
  • 72
6

I'm looking for a way to loop through a HashMap in velocity, and this will work too.

#set ($map = $myobject.getMap())
#foreach( $key in $map.keySet())
      <name>$key</name>
      <value>$resume.get($key)</value>
#end

Just like the way you would loop through a HashMap in java.

Allan Ruin
  • 5,229
  • 7
  • 37
  • 42
3

To clarify (I cannot comment), in general you can use either the Java get methods, or replace them by the corresponding name without with a small letter and without ().

So $mapEntry.getKey() or map.key.

alexbt
  • 16,415
  • 6
  • 78
  • 87
Vincent Gerris
  • 7,228
  • 1
  • 24
  • 22
1

Here the Value

itemsValue={data1=1,data2=2,data3=3}

So , we need to iterate the group of value;

foreach ($key in ${itemsValue.keySet()})
   if($itemsValue.get($key)==1)
        Condition
   end
end

In the above code we can see check the value will be like -"data1,data2 etc ..." but after using the get(), we can able to get the instance value.

mrsrinivas
  • 34,112
  • 13
  • 125
  • 125