ui:repeat ne fonctionne pas avec la Carte
J'ai un Map
de clés /valeurs, qui, je l'initialiser dans @PostConstruct
comme suit:
Map<String, String> myMap;
@PostConstruct
public void init() {
myMap=new LinkedHashMap<String, String>();
myMap.put("myKey","myValue");
}
public Map<String, String> getMyMap() {
return myMap;
}
public void setMyMap(Map<String, String> myMap) {
this.myMap = myMap;
}
Lorsque je tente d'effectuer une itération sur cette Carte avec <ui:repeat>
comme indiqué ci-dessous, et j'ai mis un point d'arrêt sur la lecture de la Carte, je remarque qu'il n'est pas appelé, et donc, rien n'est imprimé:
<ice:panelGroup>
<ui:repeat items="#{myBean.myMap}" var="entry" varStatus="loop">
<input type="checkbox" name="myCheckBoxes" value="#{entry.value}" />
<span class="#{fn:contains(entry.value,'g') ? 'bold-style' : ''}">#{entry.key}</span>
</ui:repeat>
</ice:panelGroup>
Mais lors du remplacement de code ci-dessus avec <c:foreach>
, tout fonctionne bien, et la liste est imprimée comme prévu, des idées pourquoi je reçois un tel comportement?
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR: JSF 2.3 (depuis 2017) prend en charge cette hors de la boîte.
Malheureusement,
UIData
etUIRepeat
ont pas de support pour une itération sur une carte en JSF.Si cela vous dérange (je suppose que c'est le cas), s'il vous plaît voter pour le problème ci-dessous et si possible laisser un commentaire qui explique comment vous vous sentez à ce sujet:
http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-479
Dans le temps, vous pouvez effectuer une itération sur une Carte avec quelques little helper code:
Alors définir une EL de la fonction dans un
*-taglib.xml
fichier comme ceci:Et enfin l'utiliser sur une Facelet comme ceci:
également de l'utiliser avec
<ui:repeat>
Semble fonctionner pour moi sur JSF 1.2, espérons que cela aide quelqu'un...
#{sessionScope}
carte.avec el 2.2 soutien vous pouvez parcourir les cartes comme ci-dessous.
get(x)
. Mieux itérer surentrySet()
.