Desde su código:
<c:forEach items="${myBean.myMap.keySet}" var="var">
Esto no va a funcionar. Esto requiere un método getKeySet()
en the Map
interface, pero no hay ninguno.
Si su entorno acepta EL 2,2 (Servlet 3.0 contenedores como Tomcat 7, Glassfish 3, etc), entonces usted debe invocar el keySet()
método directamente en lugar de llamarlo como una propiedad:
<c:forEach items="#{myBean.myMap.keySet()}" var="key">
<h:outputText value="#{key}"/>
</c:forEach>
O si su entorno no admite eL 2.2, sin embargo, entonces usted debe iterar sobre el propio mapa directamente lo que da un Map.Entry
instance en cada iteración que a su vez tiene un getKey()
method, por lo que este debe hacer así:
<c:forEach items="#{myBean.myMap}" var="entry">
<h:outputText value="#{entry.key}"/>
</c:forEach>
Ninguno de los anteriores funciona con <ui:repeat>
ya que no es compatible con Map
ni Set
. Es compatible con List
y solo matriz. La diferencia entre <c:forEach>
y <ui:repeat>
es que el <c:forEach>
genera varios componentes JSF durante el tiempo de compilación de la vista y que el <ui:repeat>
crea un solo componente JSF que genera su salida HTML varias veces durante el tiempo de visualización de la vista.
lo he descubierto. Publicaré en 8 horas cuando SO me lo permita. – Adam