I have a map exposed to my visualforce page and I want to loop over it and display key and value


public Map<String,String> myMap { get; set; }

//init myMap 


 <apex:repeat value="{!myMap.keySet() }" var="fieldKey">
    key: {!fieldKey }
    value: {!myMap.get(fieldKey ) }

but it gives the error Error: Unknown function myMap.keySet. Check spelling

2 Answers 2


The Visualforce for this situation is this:

<apex:repeat value="{!myMap}" var="fieldKey">
    key: {!fieldKey }
    value: {!myMap[fieldKey]}

because the map key is automatically used by the apex:repeat and square brackets are the expression language way of looking up a value in a map.


Most of the time the lack of ordering of the map keys isn't a good thing; iterating over a separate controller property that contains a sorted list of the key values instead is a way to address that:

public List<String> orderedKeys {
    get {
        List<String> keys = new List<String>(myMap.keySet());
        return keys;


See this answer for some examples of how the ordering of the keys is now more predictable.


It might be a lot simpler to create a List of wrapper classes and have the key/value in there.

public class MyWrapper
  public String key{get; private set;}
  public String value{get; private set;}

  public MyWrapper(String key, String value)
    this.key = key;
    this.value = value;

You can create the list of wrapper in your controller like:

myWrappers = new List<MyWrapper>();
for (String key: myMap.keySet())
  myWrappers.add(new MyWrapper(key, myMap.get(key));

You can then use repeat over this list you created.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .