IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

[JSF] Binder un champ sur un élément d'une liste


Sujet :

JSF Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 31
    Points : 16
    Points
    16
    Par défaut [JSF] Binder un champ sur un élément d'une liste
    Je souhaiterais associer à un champ (de type inputFileUpload) un élément d'une liste (Collection, Array, Map..).

    L'idée est de pouvoir ajouter autant d'élément que souhaité par l'utilisateur.
    Je parviens à ajouter dynamiquement les d'éléments inputFileUpload mais je ne parviens pas associer à chacun l'entrée dans une collection (via la propriété value).

    Quelqu'un a-t-il une idée ?

  2. #2
    Membre régulier Avatar de et.rond.et.rond
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 110
    Points : 119
    Points
    119
    Par défaut
    le "inputFileUpload" n'a pas de "value" il permet uniquement au client de sélectionner un fichier pour l'upload
    ... petit patapon

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Le code suivant permet d'associer le fichier sélectionné par l'utilisateur à la propriété fileUp de type UploadedFile du Bean productionProblemController.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <t:inputFileUpload  id="inputFileUpload0"
    	storage="file"
            styleClass="fileUploadInput"
            required="true"
            value="#{productionProblemController.fileUp}"
            maxlength="200000"/>
    Je souhaiterais pouvoir faire la même chose en lui associant non pas une propriété mais une entrée dans une collection.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Points : 514
    Points
    514
    Par défaut
    tu déclare une collection de type de type inputFileUpload

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<inputFileUpload> list
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <t:inputFileUpload  id="inputFileUpload0"
    	storage="file"
            styleClass="fileUploadInput"
            required="true"
            value="#{productionProblemController.list['0']}"
            maxlength="200000"/>
    Meme chose pour une map sauf que tu met le nom de ta clé à la place du '0'

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Merci pour ces précisions !!

    En effet ça fonctionne. Mon problème est que les composants inputFileUpload sont créés lorsque l'utilisateur clique sur un commandLink.
    Lors de la création du nouveau composant HtmlInputFileUpload je tente de lui affecter l'entrée dans ma liste mais rien n'est bindé (cf. code suivant).

    JSF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <h:outputLabel id="attachementsLabel" for="attachmentsPanelGrid" value="Pièces jointes" />
    <h:panelGrid id="attachmentsPanelGrid" columns="1" >
    <h:commandLink id="addFileCommandLink" actionListener="#{productionProblemController.addFile}" immediate="true" value="Ajouter un fichier"/>
    </h:panelGrid>
    Bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    public class ProductionProblemController implements Serializable {
    	private Map<String, UploadedFile> filesUp;
    ...
    	public void addFile(ActionEvent pEvt) {
    		UIViewRoot tRoot = FacesContext.getCurrentInstance().getViewRoot();
    		UIComponent tForm = tRoot.findComponent("createForm");
    		UIComponent tFormPG = tForm.findComponent("formPanelGrid");
    		HtmlPanelGrid tAttachmentsPG = (HtmlPanelGrid)tFormPG.findComponent("attachmentsPanelGrid");
    		List tChildren = tAttachmentsPG.getChildren();
    		HtmlInputFileUpload tNewInputFileUpload = new HtmlInputFileUpload();
    		String tKey = "inputFileUpload" + tChildren.size();
    		tNewInputFileUpload.setId(tKey);
    		tNewInputFileUpload.setStorage("file");
    		tNewInputFileUpload.setStyleClass("fileUploadInput");
    		filesUp.put(tKey, null);
    		tNewInputFileUpload.setValue(filesUp.get(tKey));
    		tNewInputFileUpload.setMaxlength(200000);
    		// Ajout au tableau
    		tChildren.add(tNewInputFileUpload);
    	}
    }
    Mon problème est que le composant est bien ajouté à ma JSP mais rien n'est bindé sur mon Bean.

    Comment faire ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Points : 514
    Points
    514
    Par défaut
    A la place de tNewInputFileUpload.setValue(filesUp.get(tKey));

    tu peut mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    FacesContext fc = FacesContext.getCurrentInstance();
    Application app = fc.getApplication();
     
    ValueBinding vb = app.createValuebinding("#{productionProblemController.filesUp['"+tKey+"']},null)
     
    tNewInputFileUpload.setValuebinding("value",vb);
    la value de ton composant sera alors un binding de la forme ("#{productionProblemController.filesUp['"+tKey+"']}

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Merci, tout fonctionne comme attendu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Sharepoint 2010] Compteur de clicks sur les éléments d'une liste
    Par rohstev dans le forum Développement Sharepoint
    Réponses: 5
    Dernier message: 31/07/2015, 16h48
  2. Evénement clic sur un élément d'une liste
    Par maxusn dans le forum jQuery
    Réponses: 2
    Dernier message: 26/11/2012, 16h08
  3. Réponses: 4
    Dernier message: 26/07/2011, 06h31
  4. [WSS 3.0] Autorisations sur un élément d'une liste
    Par shako95 dans le forum SharePoint
    Réponses: 7
    Dernier message: 03/07/2008, 10h49
  5. Pointeur sur un élément d'une liste
    Par azerty25 dans le forum Général Python
    Réponses: 3
    Dernier message: 18/11/2007, 12h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo