J'ai un écran d'édition qui affiche une série de propriétés (champs) éditables d'une entité. Et cette liste de champs est dynamique, dans le sens où n'importe quel champ peut être ajouté/retiré de la liste sans aucun changement de code. J'ai un modèle quelque chose comme ça. Mon backingBean a une carte de ces propriétés (pour d'autres raisons, nous avons choisi la carte comme la structure de données) Lier les propriétés dynamiques à l'aide de JSF
public class Property{
private String displayName;
private String value;
private int displayOrder;
//other props,getters,setters etc..
}
public class BackingBean{
private Map<String,Property> editableProps;
//other props,getters,setters etc..
}
Le problème est avec itérer sur cette carte et produire une zone de texte pour chacun de l'entrée. Depuis a4j: répétition (richfaces) n'a pas itérer sur une carte, j'ai décidé d'utiliser JSTL et le fragment de code ressemble à quelque chose comme ça,
<c:forEach items="${mybean.editableProps}"
var="item" >
<tr>
<td>
<c:out value="${item.value.displayName}"/>
</td>
<td>
<input type="text" value="${item.value.value}" />
</td>
</tr>
</c:forEach>
Cela fonctionne bien, sauf pour le fait que la liaison d'un champ de l'interface utilisateur à la propriété de haricot ne se produira pas automatiquement. Si j'essaie d'utiliser h: inputText à l'intérieur c: forEach, le composant n'est pas rendu (supposons que jstl var n'est pas disponible pour le jsf). Y a-t-il une façon JSF de faire tout cela (Utiliser hashmap)? Pour qu'une zone de texte soit produite pour chaque entrée de la carte et que toute modification y soit liée à la propriété java bean sous-jacente.
9 mois plus tard et j'ai la même question EXACT. L'avez-vous déjà résolu? –
Non, il suffit de l'implémenter de manière non-jsf. – chedine