Can anyone please help me to understand the below code. I am not able to understand how we are extracting value from map on visualforce page.
Actually i am trying to get the size of value list which is associated with respective key in map.
<apex:outputPanel >
<apex:repeat value="{!attributeWrapper.mapAllAttributesLabel}" var="M">
<div>
<div>{!attributeWrapper.mapLabels[M].Name} </div>
<div>
<ul>
<apex:repeat value="{!attributeWrapper.mapAllAttributesLabel[M]}" var="attribute">
<li>
<p>
<apex:outputLink onclick="selectAttribute('{!attribute.attributeLabel.Label__c}','{!attribute.attributeLabel.Attribute__c}');return false;">
<apex:outputLabel value="{!attribute.attributeLabel.Attribute__r.Name}"/>
</apex:outputLink>
</p>
</li>
</apex:repeat>
</ul>
</div>
</div>
</apex:repeat>
</apex:outputPanel>
public with sharing class AttributeWrapper {
public Map<String, List<AttributesLabelWrapper>> mapAllAttributesLabel{
// some code to populate this map
}
}
If i do:
{!attributeWrapper.mapAllAttributesLabel[M].size}
I get an error so how do i get the size of value list on VF page?
Best Answer
I tried to replicate your problem, and ended up trying different things, no luck doing it your way (confirmed that, got a visualforce error), no luck with
<apex:param>
but what I ended up doing was I created a second map, with the same keys, which basically just holds the size of the list in an Integer, and get those values.Here is my code:
VisualForce Page
Apex Controller
Map Explanation (old answer, but perhaps useful for other people)
You can't do a
.size
on a value of the map.You try to get a single value from the map by adding the square brackets with the variable M
{!attributeWrapper.mapAllAttributesLabel[M].size}
which is basically equal tomapAllAttributesLabel.get(M);
in apex.if you want to get the size of your map just do
{!attributeWrapper.mapAllAttributesLabel.size}
which is equal tomapAllAttributesLabel.size();
in apex.with the apex repeat, you loop over the keys in your map, and the var set by var="M" defines the current key in your loop. Each time you do mapAllAttributesLabel[M] you get the value of that key in your map.