2010-04-27 7 views
0

Je développe une application sur GlassFish v3 qui utilise Suns-RI de JavaEE6 et JSF2.0, etc. Et la mauvaise chose est, qu'aucun changement/changement de Suns RI ne peut être fait (pour utiliser MyFaces ou quelque chose comme ça).java.util.Map avec HtmlDataTable

Maintenant, le problème est, que je veux construire HtmlDatatable à la main (en code Java). Le datatable doit représenter java.util.Map où la première colonne doit afficher la clé et la seconde les valeurs de la carte.

J'ai construit avec succès un PanelGrid à partir d'un java.util.List et utilisé à chaque fois les méthodes "setExpressionValue" de UIComponent pour lier l'interface utilisateur à la liste sous-jacente.

Mais maintenant, cela ne fonctionne pas avec la carte. Voici un extrait de mon code:

public HtmlDataTable getEntityDetailsDataTable() { 
... 
Application app = FacesContext.getCurrentInstance().getApplication(); 
HtmlDataTable component = (HtmlDataTable)app.createComponent(HtmlDataTable.COMPONENT_TYPE); 
component.setValueExpression("value", ExpressionUtil.createValueExpression("#{entityTree.entity."+fieldName+".entrySet()}", Map.class)); 
component.setVar("param"); 
UIColumn column = new UIColumn(); 
UIOutput label1 = DynamicHtmlComponentCreator.createHtmlOutputText("#{param[key]}", String.class); 
column.getChildren().add(label1); 
UIOutput label2 = DynamicHtmlComponentCreator.createHtmlOutputText("#{param[value]}", String.class); 
column.getChildren().add(label2); 
component.getChildren().add(column); 
... 
return component; 
} 
component.getChildren().add(column); 
... 
return component; 
} 

Ainsi, outre le problème est que ce code n'imprime le contenu de la carte, sur une autre page J'ai besoin des valeurs affichées dans les éléments HtmlInputText et toute la carte mise à jour si l'utilisateur clique sur un bouton "Enregistrer". Donc, le problème est que ce code imprime seulement le contenu de la carte, sur une autre page j'ai besoin des valeurs affichées dans les éléments HtmlInputText et la carte entière mise à jour si l'utilisateur clique sur un bouton "Enregistrer". S'il existe une solution de contournement, pour représenter la carte comme des listes ... aidez-moi, car pour cela (mappage comme 2 listes) je ne sais pas comment le modèle de carte/base de données sous-jacent peut être mis à jour à nouveau.

Espérons que quelqu'un peut me aider ....

Répondre

1

Les composants UIData ne peuvent pas itérer sur un Set car il ne fournit pas les moyens d'obtenir des éléments/set par index. Cela ne fonctionnerait pas non plus lorsque vous l'avez codé directement dans la page JSF. Remplacez-le par List ou DataModel.

+0

Maintenant, j'ai implémenté une classe KeyValuePair personnalisée dont les objets sont maintenus dans une liste. L'interrogation des clés n'est pas si rapide, mais pour le moment cela fonctionne. Merci BalusC! – gerry

Questions connexes