Hi!
I'm new to this list and to JSF in general. I have a problem with the
t:selectItems component and would be grateful for any advice. I'm using
MyFaces 1.2.5, Tomahawk 1.1.8 and Facelets.
I have this in my file:
<h:selectManyCheckbox id="selectedRoles" value="#{myBean.selectedRoles}"
layout="pageDirection">
<t:selectItems value="#{myBean.allRoles}" var="role"
itemLabel="#{role}" itemValue="#{role}" />
</h:selectManyCheckbox>
selectedRoles is a Long[] array, allRoles is a Map<String, Long>,
mapping the role name to their ID. What I want is the ID as value of the
checkbox and the name as label text. Above code generates the ID as both
the value and the label text though.
Now page [1] has a more detailed explanation of the possibilities of the
value attribute than [2], but I did check the source code of
org.apache.myfaces.custom.selectitems.AbstractUISelectItems and it seems
to be the same for both the JSF 1.1 and 1.2 version of the component.
[1]
http://myfaces.apache.org/tomahawk-project/tomahawk/tagdoc/t_selectItems.html
[2]
http://myfaces.apache.org/tomahawk-project/tomahawk12/tagdoc/t_selectItems.html
The documentation under [1] says:
value: An EL expression that specifies the contents of the selection
list. The expression can refer to one of the following:
1. A single SelectItem
2. An array or Collection of SelectItem instances
3. A Map. The contents of the Map are used to create SelectItem
instances, where the SelectItem's label is the map's key value, and the
SelectItem's value is the map's value. When using a map, it is
recommended that an ordered implementation such as java.util.TreeMap is
used.
Number 3 is exactly what I want, I'm even using a TreeMap. I would
expect to get the keys as labels and the values as checkbox values
automatically with just using <t:selectItems
value="#{myBean.allRoles}"/>. But looking in the source code, I don't
see anything to provide this functionality. Unfortunately I also don't
see a way to configure the component with the other attributes to do
this, since only the value of the Map.Entry is set as request attribute.
Meaning, I can't just do something like:
<t:selectItems value="#{myBean.allRoles}" var="mapEntry"
itemLabel="#{mapEntry.key}" itemValue="#{mapEntry.value}" />
So, am I missing something here? Is there a way to do this? Or is the
documentation simply wrong?
Regards,
Johannes Ruthenberg