I have a map exposed to my visualforce page and I want to loop over it and display key and value
controller:
public Map<String,String> myMap { get; set; }
//init myMap
page:
<apex:repeat value="{!myMap.keySet() }" var="fieldKey">
key: {!fieldKey }
value: {!myMap.get(fieldKey ) }
</apex:repeat>
but it gives the error Error: Unknown function myMap.keySet. Check spelling
Attribution to: vishesh
Possible Suggestion/Solution #1
The Visualforce for this situation is this:
<apex:repeat value="{!myMap}" var="fieldKey">
key: {!fieldKey }
value: {!myMap[fieldKey]}
</apex:repeat>
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.
PS
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());
keys.sort();
return keys;
}
}
PPS
See this answer for some examples of how the ordering of the keys is now more predictable.
Attribution to: Keith C
Possible Suggestion/Solution #2
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.
Attribution to: dphil
This content is remixed from stackoverflow or stackexchange. Please visit https://salesforce.stackexchange.com/questions/34582