Resulta que cuando uno alimento un <f:selectItems> con un Map<Key, Value>, éste detecta automáticamente que se trata de este tipo de objetos por lo que no es necesario especificarle cuál es el key y cuál es el value:
<h:selectOneMenu value="#{bean.propEntera}"> <f:selectItems value="#{bean.propMapa}"/> </h:selectOneMenu>
No obstante, el resultado del HTML será el opuesto a lo que podría esperarse pues el Value del Map
queda en el Value del Option (coincidencia de nombres aparte, el Value es el valor oculto en el Option),
y el Key del Map en el Label del Option (nuevamente, el Label es el visible y el Key debiera ser el oculto):
<select> <option selected="selected" value="MapaValue1">MapaKey1</option> <option value="MapaValue2">MapaKey2</option> <option value="MapaValue3">MapaKey3</option> </select>
Lo cual resulta contra-intuitivo, como lo hizo notar Balus C en el JIRA 1808 >>
El cual, sin embargo, se encuentra en estado NO FIX.
El mismo Balus C explica que es el Label el que tiene precedemcia de ser único >>
y aconsejo usar este truco si disponemos de E.L.2.2. >>
<h:selectOneMenu value="#{bean.integerProperty}"> <f:selectItems value="#{bean.mapProperty.entrySet()}" var="entry" itemValue="#{entry.key}" itemLabel="#{entry.value}" /> </h:selectOneMenu>
A lo que voy -y que veo que va a ser otro post – es que estoy en JBoss 6 pero ésto no funciona,
al parecer porque mi web.xml no se conforma a la especificación Servlet 3.0 >>
Tarea: investigar y probar…