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 :

rich:picklist, passer paramètres à une fonction


Sujet :

JSF Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Points : 11
    Points
    11
    Par défaut rich:picklist, passer paramètres à une fonction
    Bonjour à tous,

    J'ai une picklist qui permet d'attribuer des groupes à une personne (selon le type de formulaire). J'ai donc une liste globale de groupes à gauche, et à droite la liste récupérée des groupes déjà attribués à la personne (correspond à form.group)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <rich:pickList id="pklistGrp" value="#{form.groups}"
        copyControlLabel="#{DistribListManagementBean.addGrpToList(form,item)}" 
        removeControlLabel="#{DistribListManagementBean.removeGrpFromList(form,item)}"
        copyAllVisible="false" 
        removeAllVisible="false">
         <s:selectItems value="#{DistribListManagementBean.grpList}" var="item" label="#{item}"/>
         <a4j:support event="onlistchanged" reRender="pklistDiv,pklistBu"/>
    </rich:pickList>
    Ce qui ne fonctionne pas c'est que j'aimerais, lorsque je j'ajoute un groupe dans la liste de la personne, c'est ajouter dans une liste qui servira pour une autre picklist toutes les divisions (sous-groupe) du groupe sélectionné.
    C'est ce que je fais dans DistribListManagementBean.addGrpToList(form,item).

    Ca ne fonctionne pas. J'ai donc fait un affichage dans cette fonction et il s'avère que rien n'est passé en paramètre. En tout cas pas le group.

    J'ai également cette erreur qui est très certainement liée mais que je ne comprend pas :
    14:12:47,067 INFO [lifecycle] WARNING: FacesMessage(s) have been enqueued, but may not have been displayed. sourceId=j_id54:repeat:0:pklistGrp[severity=(ERROR 2), summary= (j_id54:repeat:0:pklistGrp: Validation Error: Value is not valid), detail=(j_id54:repeat:0:pklistGrp: Validation Error: Value is not valid)]
    Si vous comprenez mieux les picklist que moi, pouvez-vous m'expliquer mon erreur svp?

    Dans un autre programme j'avais utiliser de cette façon une picklist et il n'y avait aucun problème.

    Merci d'avance pour vos réponses

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 114
    Points
    114
    Par défaut
    Salut,

    essayes de voir la live demo de RicheFaces, pour plus de détails par rapport à l'utilisation de <rich:pickList />

    le deuxième exemple dans le lien ressemble un peu à ce que tu veux faire (si j'ai bien compris :p )

    bonne chance

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Bonsoir,

    Merci pour cette indication mais j'ai déjà regardé dans tous les sens les exemples de live demo ainsi que les explications sur jboss.org.
    C'est d'ailleurs d'après ces exemples que j'ai essayé d'appeler des fonctions lors de l'appui sur les boutons copy et remove.
    Mais dans tous les exemples que vous pouvez voir ils utilisent des fonctions qui ne prennent pas de paramètres. Ce sont de simple getters et setters.
    Ici mon problème est justement que je cherche à passer un, voire deux paramètres à l'appel d'une fonction qui me permet de rajouter tous les sous-groupes d'un groupe à chaque fois que je copy un group, dans une liste qui sera réutilisée pour une autre picklist.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    J'ai essayé de simplifier au maximum mon code, voilà ce que ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <rich:pickList id="pickListGrp" 
    	value="#{form.groups}"
    	copyAllVisible="false" removeAllVisible="false">
    	<s:selectItems value="#{DistribListManagementBean.getGrpList()}" var="item" label="#{item}"/>
    	<a4j:support event="onlistchanged" reRender="pickListDiv,pickListBu" action="#{DistribListManagementBean.calculDivFromGrp(form.groups)}"/>
    </rich:pickList>
    <rich:pickList id="pickListDiv" 
    	value="#{form.divListSelected}">
    	<s:selectItems value="#{DistribListManagementBean.getDivListFromGrp()}" var="item" label="#{item}"/>
    	<a4j:support event="onlistchanged" reRender="pickListBu" action="#{DistribListManagementBean.calculBuFromDiv(form.divListSelected)}"/>
    </rich:pickList>
    et voici un exemple de getter et setter : ils sont selon ce model :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public List<String> getGrpList(){return grpList;}
    public void setGrpList(List<String> grpList){this.grpList = grpList;}
    ainsi que la fonction qui calcule les sous-groups (les divisions) :

    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
     
    public void calculDivFromGrp(List<String> grps){
        for(String grp : grps){
            if(grp.contains(",")){
    		grp = grp.substring(0,grp.indexOf(','));
    	}
    	List<Div> divList = ejbDAO.getOrganization().getDivListFromGrp(grp);
    	for(Div div : divList){
    		System.out.println("   "+div.getCode()+"|"+div.getDescr());
    		divListFromGrp.add(div.getCode()+"|"+div.getDescr());
    	}
        }
        Set<String> cleanList = new HashSet<String>(divListFromGrp);
        divListFromGrp = new ArrayList<String>(cleanList);
    }
    Elle n'est clairement pas optimisée mais pour l'instant ce n'est pas grave.

    Donc à présent j'ai des soucis de conversion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    10:13:15,192 INFO  [lifecycle] WARNING: FacesMessage(s) have been enqueued, but may not have been displayed. 
    sourceId=j_id54:repeat:0:pickListGrp[severity=(ERROR 2), summary= (j_id54:repeat:0:pickListGrp: Validation Error: Value is not valid), 
    detail=(j_id54:repeat:0:pickListGrp: Validation Error: Value is not valid)]
    Ce que je ne comprend pas car je manipule uniquement des String et pas des objets. Je ne suis quand même pas obligée de créer un converter qui prend un String et qui retourne un String??
    EDIT :

    Finalement ce code fonctionne. J'ai un problème de conversion et il s'avère que c'était dû à l'écriture de mes String :
    la liste de String : "CODE, DESCR" ne passait pas, je l'ai changé en "CODE|DESCR" et plus de problème de Invalid value.

    Nouveau problème :
    Ma première pickList fonctionne, le calcul de la liste de sous-groupes se fait bien, j'ai vérifié que ma liste est bien remplie et c'est le cas. Mais les reRender ne fonctionnent pas, ma seconde pickList reste vide et ne se met pas à jour. ... Pas encore trouvé pourquoi.

    EDIT 2 :

    En les mettant dans un panelGrid et en rafraichissant tout le panel à chaque modification les listes se mettent à jour.

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 114
    Points
    114
    Par défaut
    Salut;

    déjà pour <f:selectItems value="#{DistribListManagementBean.divListFromGrp}"/> , il faut que divListFromGrp soit de type List<SelectItem> dans ton ManagedBean.

    en suite, pour faire passer des paramètre à une méthode du bean essayes ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <a4j:support event="onlistchanged" actionListener="#{DistribListManagementBean.calculBuFromDiv}">
          <f:param name="param1" value="ValeurParam1" /> 
          <f:param name="param2" value="ValeurParam2" /> 
    </a4j:support>
    par la suite tu peux récupérer ces paramètres dans le Managed Bean comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void calculBuFromDiv(ActionEvent evt){
         FacesContext context = FacesContext.getCurrentInstance();
         Map map = context.getExternalContext().getRequestParameterMap();
         String param1= (String) map.get("param1");
         String param2= (String) map.get("param2");
         // ....
         //
    }
    j'espère que ça peut aider

  6. #6
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Merci pour ces indications, c'est une méthode que je ne connaissais pas.
    Du coup là je me suis dépatouillée en utilisant s:selectItems au lieu de f:selectItems.

    Bonne journée

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

Discussions similaires

  1. Passer un paramètre à une fonction avec un gestionnaire d'évènements
    Par el_butcho dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/03/2008, 21h22
  2. Réponses: 4
    Dernier message: 28/03/2008, 21h43
  3. Passer des paramètres à une fonction dans before_filter
    Par abir84 dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 27/01/2008, 19h40
  4. Réponses: 1
    Dernier message: 23/02/2007, 08h49
  5. Réponses: 10
    Dernier message: 02/02/2007, 16h00

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