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

AWT/Swing Java Discussion :

Ajax/JQuery dans une application client lourd, est-ce possible ?


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 84
    Points : 65
    Points
    65
    Par défaut Ajax/JQuery dans une application client lourd, est-ce possible ?
    Bonjour Tous le monde

    je suis en train de réaliser un POC (proof of concept) ,c'est une application client lourd avec java /Swing
    je veux ajouter des fonctionnalités d'Ajax ,
    est ce que JQuery4j peut faire ça ?

    j'ai trouvé ce lien http://www.jquery4j.org/demo/demo.zul

    j'ai essayé dialog par exemple mais le probleme se pose au niveau de
    Page page !!

    si quelqu'un peut me guider ,j'en serai reconnaissant

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour quelle raison aurais tu besoin d'ajax dans un client lourd?

    Que cherches tu à faire réellement avec jQuery sur ton gui Swing? (sachant que celui ci ne contient ni javascript, ni dom).
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    je veux rafraichir la table lorsque j'ajoute une nouvelle ligne .
    dans mon cas par exemple :
    un nouveau record est bien enregistré côté base de données ,mais côté swing (JTable) la table ne change pas (je dois ré exécuter l'application) .

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Bah, non.

    Mais qu'entends tu par contrôle asynchrone?
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    bon j'ai eu l'occasion dans un projet JEE de travailler avec richFaces et j'ai utilisé le support d'ajax ,comme par exemple le rafraichissement de la table ,le contrôle de la saisie .
    le contrôle de la saisie, je vous donne un exemple ; quand je tape la lettre 'd' il doit avoir instantanément une liste avec les mots qui commencent par d
    pour actualiser la table j'ai fais comme dans le tuto http://baptiste-wicht.developpez.com...ing/jtable/#L4

    mais j'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     java.lang.IndexOutOfBoundsException: Invalid range

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Absolument pas besoin d'ajax pour ça.

    Tout d'abord, il va te falloir comprendre comment Swing fonctionne.

    Donc, première lecture importante: http://gfx.developpez.com/tutoriel/j...ing-threading/

    Ce qu'il faut en retenir c'est que tout ce qui est récupération de données (que ce soit par web service/appels jdbc/lecture de fichiers &cie) doit se faire dans des threads séparés.
    Pour ceci, je te conseille l'utilisation du SwingWorker: http://rom.developpez.com/java-swingworker/

    Ensuite, pour l'autocomplétion, tu as des api telles que Swingx qui offrent ça.
    http://edwin.baculsoft.com/2010/09/c...-using-swingx/

    http://java.net/projects/swingx


    Pour le rafraîchissement de ta JTable, l'enregistrement est-il créé par la même application ou pas?
    Si c'est le cas, tu as juste à ajouter ton objet au modèle de ta JTable via une méthode spécifique que tu auras créé.

    Si la ligne n'est pas créée par la même application, tu vas devoir faire en sorte que ton application se rafraîchisse périodiquement en utilisant un timer swing.

    Ensuite, je ne suis pas sûr qu'accéder directement à une base de donnée depuis une application Swing soit vraiment recommandé.
    Cela obligerait à ouvrir l'accès au serveur de base de données à tous les utilisateurs, ce qui serait une bonne faille de sécurité potentielle (ils pourraient émettre n'importe que ordre).


    Il serait donc préférable de mettre une application JEE entre les deux proposant des web services correspondant aux actions nécessaires aux applications clientes.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    je vous remercie infiniment SINOK ,pour la documentation je vais la lire attentivement & à tête reposée , mais pour le rafraichissement de la table
    j'ai fais comme dans le tuto http://baptiste-wicht.developpez.com...ing/jtable/#L4
    sachant que je travaille dans une même application.
    j'ai ajouté dans la tableModelEleve (extends abstractTableModel) la methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void addEleve(Eleve el) {
            elist.add(el);
     
            fireTableRowsInserted(elist.size() -1, elist.size() -1);
        }
    mais j'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.lang.IndexOutOfBoundsException: Invalid range

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ce serait peut-être bien de nous donner plus de code, c'est quoi elist? Quel est sont rapport avec le modèle (parce que le fire doit correspondre à ce qui se trouve dans le modèle)?

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    ok
    voici mon TableModelEleve

    Code TableModelEleve : 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    package ma.plune.presentation;
     
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.swing.table.AbstractTableModel;
     
    import ma.plune.application.ServiceFactory;
    import ma.plune.model.Eleve;
     
    public class TableModelEleve extends AbstractTableModel {
     
     
    	public  ServiceFactory sf = new ServiceFactory();
        public  List<Eleve> elist =  sf.getEleveList();
        public Eleve eleveCree;
     
     
    	public  Object [] colnames = {"ID","NOM","AGE"};
        public Object[][] data= new Object[elist.size()][3];
     
     
        public TableModelEleve(){
           for(int i=0;i<elist.size();i++)
    			     {
    			    	 System.out.println(elist.get(i));
    			    	 data[i][0] = elist.get(i).getEleveId();
    			         data[i][1] = elist.get(i).getEleveNom();
    			         data[i][2] = elist.get(i).getEleveAge();
    			     }
     
     
     
     
            }
     
     
        public String getColumnName(int col) {
            return (String) colnames[col];
        }
     
     
     
    	@Override
    	public int getColumnCount() {
    		// TODO Auto-generated method stub
    		return data[0].length;
    	}
     
    	@Override
    	public int getRowCount() {
     
    		return data.length;
    	}
     
    	@Override
    	public Object getValueAt(int row, int col) {
    		// TODO Auto-generated method stub
    		return data[row][col];
     
    	 }
     
     
     
    	public void addEleve(Eleve el) {
            elist.add(el);
     
            fireTableRowsInserted(elist.size() -1, elist.size() -1);
        }
     
     
     
     
     
    }

    je precise que le probleme est que la table ne s'actualise pas .

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ton problème, c'est que tu rajoute ton elève dans eliste, mais tu n'utilise pas elist pour ton modèle, tu utilise data.

    Soit tu rajoute ton élève à data
    Soit tu révois tes méthodes pour qu'elle utilisent elist et non data.

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    voilà j'ai pris en consideration votre remarque j'ai crée une nouvelle liste eleveList

    voici mon model :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    package ma.plune.presentation;
     
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.swing.table.AbstractTableModel;
     
    import ma.plune.application.ServiceFactory;
    import ma.plune.model.Eleve;
     
    public class TableModelEleve extends AbstractTableModel {
     
     
    	public  ServiceFactory sf = new ServiceFactory();
        public  List<Eleve> elist =  sf.getEleveList();
        public Eleve eleveCree;
     
     
    	public  Object [] colnames = {"ID","NOM","AGE"};
        //public Object[][] data= new Object[elist.size()][3];
     
        private final List<Eleve> eleveList = new ArrayList<Eleve>();
     
     
        public TableModelEleve(){
     
           for(int i=0;i<elist.size();i++)
    			     {
     
     
        	             eleveList.add(elist.get(i));
    			    	 System.out.println(eleveList.get(i));
    //			    	 data[i][0] = elist.get(i).getEleveId();
    //			         data[i][1] = elist.get(i).getEleveNom();
    //			         data[i][2] = elist.get(i).getEleveAge();
    			     }
     
     
     
     
            }
     
     
        public String getColumnName(int col) {
            return (String) colnames[col];
        }
     
     
     
    	@Override
    	public int getColumnCount() {
    		// TODO Auto-generated method stub
    		return data[0].length;
    	}
     
    	@Override
    	public int getRowCount() {
     
    		return data.length;
    	}
     
    	@Override
    	public Object getValueAt(int rowIndex, int columnIndex) {
    		// TODO Auto-generated method stub
    		//return data[row][col];
     
    		 switch(columnIndex){
             case 0:
                 return eleveList.get(rowIndex).getEleveId();
             case 1:
                 return eleveList.get(rowIndex).getEleveNom();
             case 2:
                 return eleveList.get(rowIndex).getEleveAge();
          default:
                 return null; //Ne devrait jamais arriver
         }
     
     
     
     
     
     
    	 }
     
     
     
    	public void addEleve(Eleve el) {
            elist.add(el);
     
     
            fireTableRowsInserted(elist.size() -1, elist.size() -1);
        }
     
     
     
     
     
    }
    j'aimerais bien savoir qu'est que je dois associer au boutton save
    pour l'instant il est comme ça
    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
     
    	public void actionPerformed(ActionEvent arg0) {
             			System.out.println("button save clicked ");
     
             			String name = txt_nom.getText();
             			String age = txt_age.getText();
             			int n = Integer.parseInt(age);
     
             			eleveCree.setEleveNom(name);
             			eleveCree.setEleveAge(n);
     
             			sf.add(eleveCree); // ajout côté Hibernate
     
     
             			setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     
             		}
             	});

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    c'est bon je vous remercie tchize et sinok pour vos conseils

    pour le boutton save je lui a ajouté l'instruction :
    sf.add(eleveCree); // côté hibernate
    modele.addEleve(eleveCree); // côté swing

    pour le model j'ai travaillé avec les liste :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    package ma.plune.presentation;
     
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.swing.table.AbstractTableModel;
     
    import ma.plune.application.ServiceFactory;
    import ma.plune.model.Eleve;
     
    public class TableModelEleve extends AbstractTableModel {
     
     
    	public  ServiceFactory sf = new ServiceFactory();
        public  List<Eleve> elist =  sf.getEleveList();
        public Eleve eleveCree;
     
     
    	public  Object [] colnames = {"ID","NOM","AGE"};
        public Object[][] data= new Object[elist.size()][3];
     
        private final List<Eleve> eleveList = new ArrayList<Eleve>();
     
     
        public TableModelEleve(){
     
           for(int i=0;i<elist.size();i++)
    			     {
     
     
        	             eleveList.add(elist.get(i));
    			    	 System.out.println(eleveList.get(i));
    //			    	 data[i][0] = elist.get(i).getEleveId();
    //			         data[i][1] = elist.get(i).getEleveNom();
    //			         data[i][2] = elist.get(i).getEleveAge();
    			     }
     
     
     
     
            }
     
     
        public String getColumnName(int col) {
            return (String) colnames[col];
        }
     
     
     
    	@Override
    	public int getColumnCount() {
    		// TODO Auto-generated method stub
    		//return data[0].length;
     
    	return 3;
    	}
     
    	@Override
    	public int getRowCount() {
    		 return eleveList.size();
    		//return data.length;
    	}
     
    	@Override
    	public Object getValueAt(int rowIndex, int columnIndex) {
    		// TODO Auto-generated method stub
    		//return data[row][col];
     
    		 switch(columnIndex){
             case 0:
                 return eleveList.get(rowIndex).getEleveId();
             case 1:
                 return eleveList.get(rowIndex).getEleveNom();
             case 2:
                 return eleveList.get(rowIndex).getEleveAge();
          default:
                 return null; //Ne devrait jamais arriver
         }
     
     
     
     
     
     
    	 }
     
     
     
    	public void addEleve(Eleve el) {
            eleveList.add(el);
     
            fireTableRowsInserted(elist.size() -1, elist.size() -1);
        }
     
     
     
     
     
    }
     
    Je vous remercie encore une fois   :merci:

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/08/2009, 21h55
  2. Verrouillage d’enregistrement dans une application Client/server
    Par touhami dans le forum Connexion aux bases de données
    Réponses: 13
    Dernier message: 07/07/2008, 22h05
  3. Réponses: 3
    Dernier message: 25/04/2008, 08h04
  4. Intéger un OCX dans une application Client léger
    Par BB85_TIGRIS dans le forum Documents
    Réponses: 1
    Dernier message: 07/09/2007, 11h00
  5. Réponses: 1
    Dernier message: 10/09/2006, 13h02

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