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 :

Drag and drop entre 2 tree


Sujet :

JSF Java

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 411
    Points : 230
    Points
    230
    Par défaut Drag and drop entre 2 tree
    Bonjour,

    J'ai effectué un rich:tree


    voici mon code:
    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
    <h:form>
            <rich:tree switchType="client" style="width:300px; border:solid black 1px;" value="#{ManagedTree.dataC}"  var="item" dragIndicator=":dataCDragIndicator">
              <rich:treeNode dragType="item">
                   <h:outputText value="#{item.nom}" />
                   <rich:dndParam name="label" type="drag" value="item #{item.nom}" />
              </rich:treeNode>
        </rich:tree>
     
            <rich:tree style="width:300px; height:300px; border:solid black 1px;" value="#{ManagedTree.treeC}"  var="item" dragIndicator=":treeCDragIndicator" dropListener="#{ManagedTree.processDrop}">
              <rich:treeNode  dragType="item" acceptedTypes="item">
                   <h:outputText value="#{item.nom}" />
                   <rich:dndParam name="label" type="drag" value="item #{item.nom}" />
              </rich:treeNode>
        </rich:tree>
     
            </h:form>
    Pour l'instant dans ma fonction processDrop m'affiche juste un message au serveur pour voir comment ça marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      public void processDrop(DropEvent event)
        {
            Item i=(Item) event.getDragValue();
            System.out.println("test" + i.getNom());
        }
    et treeC est vide.
    Le souci c'est que quand j'essaye de faire un drag and drop je ne reçois aucun message. Et quand je drag un item ça me marque pas le nom comme dans les exemples où ça marque qu'on peu dropper ou pas. Moi ça me met un cadre avec des pointillés rouge (si c'est dans le 1er tree) ou noir.

  2. #2
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 411
    Points : 230
    Points
    230
    Par défaut
    Je suis un peu perdu! J'y arrive pas .
    Besoin d'aide.
    J'ai essayé en m'inspirant de ce lien:
    http://livedemo.exadel.com/richfaces...nd&cid=2942208.
    Mais j'arrive à rien. Quelqu'un pourrait m'expliquer comment faire svp?

  3. #3
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 411
    Points : 230
    Points
    230
    Par défaut
    Après plusieurs heures de recherche j'ai réussi à faire un petit truc.

    voici mon code jsf:
    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
      <h:form>
            <rich:tree id="tree" switchType="client" style="position:absolute; width:300px; border:solid black 1px;" value="#{SimpleTreeDndBean.dataC}"  var="item" nodeFace="item"
                       dragIndicator="indicator2" treeNodeVar="treeNode">
              <rich:treeNode type="item" dragType="item" dragValue="#{item}">
                   <h:outputText value="#{item.nom}" />
                   <rich:dndParam name="label" type="drag" value="item #{item.nom}">#{item.nom}</rich:dndParam>
              </rich:treeNode>
        </rich:tree>
     
    <a4j:outputPanel layout="block">
      <rich:dropSupport acceptedTypes="item" dropListener="#{SimpleTreeDndBean.dropListener}" reRender="treeC" />
      <rich:tree id="treeC" switchType="client" style="position:absolute; width:300px; height:300px; left:500px; border:solid black 1px;" value="#{SimpleTreeDndBean.treeC}"  var="item" dragIndicator=":treeCDragIndicator" dropListener="#{SimpleTreeDndBean.dropListener}" nodeFace="item">
      <rich:treeNode type="item"  acceptedTypes="item"  dragType="item" dragValue="#{item}">
                   <h:outputText value="#{item.nom}" />
                  <rich:dndParam name="label" type="drag" value="item #{item.nom}">#{item.nom}</rich:dndParam>
               </rich:treeNode>
     
        </rich:tree>
     
      </a4j:outputPanel>
            </h:form>
    Ma classe SimpleTreeDndBean :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class SimpleTreeDndBean {
     
     
         private TreeNode<Item> treeC = new TreeNodeImpl<Item>();
         private ManagedTree dataC = new ManagedTree();
     
     
        public TreeNode<Item> getTreeC() {
            return treeC;
        }
     
        public TreeNode<Item> getDataC()
        {
           System.out.println("creatTree");
           dataC.creatTree("0","0");
           return dataC.getRoot();
        }
     
        private Object getNewId(TreeNode parentNode) {
        System.out.println("getNewId: "+parentNode.getData().toString());
        return parentNode;
        }
     
        public void dropListener(DropEvent dropEvent) {
           System.out.println("dragtype: "+dropEvent.getDragValue().toString());
            TreeNode<Item> c=new TreeNodeImpl<Item>();
            c.setData((Item) dropEvent.getDragValue());
            treeC.addChild(c, c);
        }
     
    }
    Et ma classe ManagedTree:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    public class ManagedTree {
     
        private TreeNode<Item> root = new TreeNodeImpl<Item>();
     
        public TreeNode<Item> getRoot() {
            return root;
        }
     
        public void creatTree(String iditem,String mode)
        {
            ConnexionBean co = new ConnexionBean();
            String rep= new String();
            rep=co.loadNewHiel(iditem,mode);
            String[] items=rep.split("\n");
            for (int i = 0; i < items.length-1; i++) //-1 pour HIELFIN
            {
              String[] champs=items[i].split("\t");
              Item item=new Item(champs[0],champs[2]);
              ManagedTree children = new ManagedTree();
              children.getRoot().setData(item);
              root.addChild(i, children.getRoot());
              if(champs[5].equals("0"))
              {
                children.creatTree(champs[0], mode);
              }
            }
         }
     
        public void addChild(int arg, ManagedTree m)
        {
            root.addChild(arg, m.getRoot());
        }
     
     
        public void processDrop(DropEvent event)
        {
            Item i=(Item) event.getDragValue();
            System.out.println("test" + i.getNom());
        }
     
      }
    Donc j'ai plusieurs souci. Déjà lorsque j'essaye de faire le drag-drop du tree1 vers le tree2 le serveur relance la fonction geDataC plusieurs fois. Hors mon tree1 ne changera jamais. Relancer cette fonction est une perte de temps (surtout si il le fait plusieurs fois)

    Ensuite la mise à jour du tree2 se met à jour que 20-30sec après avoir créé le nœud.


    Et je ne parviens pas à créer le petit affichage comme on voit sur cette image:



    Moi j'ai un rectangle en pointillé qui change de couleur en fonction d'ou il se trouve:
    -rouge le tree de gauche
    -vert le tree de droite
    -noir le reste




    Si quelqu'un pouvait m'aider .

  4. #4
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 411
    Points : 230
    Points
    230
    Par défaut
    Une petit aide pour empêcher que le serveur ne relance la fonction getDataC quand je fait un drag and drop. Je trouve pas la solution .

  5. #5
    Membre actif Avatar de rushtakn
    Inscrit en
    Mai 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 213
    Points : 240
    Points
    240
    Par défaut
    Tu ne peux pas l'empecher, c'est lié au cycle de vie de jsf, c'est pour ça qu'il est déconseillé de mettre du code applicatif dans les accesseurs.
    Ta methode dataC.creatTree("0","0") devrait etre appelée ailleurs (contructeur, méthode d'action ...).

  6. #6
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 411
    Points : 230
    Points
    230
    Par défaut
    Ok merci de ta réponse pour cette raison je trouvais pas a solution. Je pensais que c'était un paramètre à changé


    Edit: ça marche super

    Mais comment faire pour avoir l'affichage comme sur l'exemple de mon poste précédent quand je fais le drag? Je n'y parviens toujours pas.

    Et de pouvoir dragger uniquement les items qui n'ont pas de fils.
    j'ai essayé avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nodeFaces="#{treeNode.leaf? 'item' : 'node'}"
    ça permet de draguer que les item sans fils mais quand je drop la fonction dropListener n'est plus appelé

Discussions similaires

  1. [VBA-E]drag and drop entre deux listbox
    Par Yolak dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 14/06/2012, 14h37
  2. Drag and Drop entre 2 JTree
    Par Lebas dans le forum Composants
    Réponses: 1
    Dernier message: 07/02/2007, 11h59
  3. [Débutant(e)][VB.NET] Drag and drop entre 2 treeviews
    Par - Manuella Leray - dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/10/2005, 15h54
  4. [FLASH MX2004] Drag and drop entre deux List
    Par aldo-tlse dans le forum Flash
    Réponses: 15
    Dernier message: 24/09/2005, 01h10
  5. Drag and Drop entre listbox
    Par zwoke dans le forum C++Builder
    Réponses: 2
    Dernier message: 05/07/2004, 14h10

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