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

GWT et Vaadin Java Discussion :

Passer d'une page à une autre


Sujet :

GWT et Vaadin Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut
    Je suis nouveau sur ce forum mais je consulte pas mal les questions et les réponses que vous fournissez. Mais voila, je travaille sur un projet en GWT depuis deux mois et je me suis retrouver il y a une semaine dans une inpasse. Je résume:
    - j'ai une classe cliente UserLogin qui représente aussi mon entrypoint. Je demande un mot de passe et un login à l'utilisateur, j'effectue ma vérification coté serveur et je reçois une réponse sous la forme d'un string représentant un fichier xml que je dois parser et générer les widget avec les information codé dans ce xml.
    - je bloque ici: si l'utilisateur est reconnu, je veux être rediriger vers une deuxième page "home" qui présentera à l'utilisateur les composant fournit par la réponse. Seulement je ne sais pas comment faire ça vue que normalement dans la classe qui génère le home je dois avoir la méthode onModuleLoad() qui parsera la réponse du serveur et qui affichera les éléments voulu.

  2. #2
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    En GWT, il faut "oublier" la notion de page telle qu'elle existait en web 1.0

    On peut parler de "page" mais il faut penser à des blocs de vues qui changent dans la page courante.

    Tu as une classe comme EntryPoint (La page au sens web 1.0).

    Dans cette classe, il faut que tu crées en quelque sorte une page dont le contenu peut varier. C'est à dire, avec par exemple un DeckPanel :
    A panel that displays all of its child widgets in a 'deck', where only one can be visible at a time
    Le deck panel, c'est un peu comme un composant à onglet sans les onglets.
    Le deck panel, c'est un peu comme un jeu de carte dont tu verrais une seule à la fois.

    Dans ce deck, tu mets ta "page de login" (le panneau que tu avais fais jusque là dans ton entry point) et tu mets également tes autres panneau (par exemple, celui qui accueillera la réponse en retour, appelons la "page d'accueil")

    Au retour de ton action de connexion, tu modifies le contenu du panneau de la "page d'accueil" et tu demandes au deck panel d'afficher la "page d'accueil" à la place de la "page de login"

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut
    Merci beaucoup, cela m'aidera à avancer. Je donne ce que je fais en ce moment histoire d'éclaircir les idées aux autres peut être:

    J'ai une seule page html, celle qui sera modifiée et "modelée" en fonction des vues que je vais donner à l'utilisateur.

    J'ai réorganisé mon code suivant les besoin:
    • une classe qui construit le petit formulaire d'identification et qui effectue les vérifications coté serveur et renvoi une réponse à la classe MainPage
    • La classe MainPage, la seule contenant la méthode onModuleLoad() qui instancie la classe précédente pour appeler la méthode résponsable du travail d'identification, puis récupère la réponse
    • Et finalement, une classe Accueil qui, si on a une réponse positive va reformater le contenu de la page html, en supprimant le formulaire et en y insérant à la place les nouvelles données générées à l'aide d'une méthode appelée biensur depuis une instance dans la classe MainPage


    Tout ça se passera normalement sans grande difficulté. J'essayerais de coder ça d'ici demain (j'ai fait déjà quelques tests et ça a l'air de marcher )

    Cependant une question me taraude: comment faire pour avoir une url différente dans le navigateur à chaque fois? si je fais comme je l'ai décrit au début, j'aurais toujours comme url http://...:8080/Projet.html

    Comment peut-on avoir par exemple http://....:8080/login pour la page d'authentification et http://....:8080/Accueil pour les données après s'être identifié?

    Et si jamais on fait ce genre d'adressage, le jour ou je tape http://....:8080/Accueil je n'aurais pas besoin de vérifier si je suis bien identifier ou pas (dans le même esprit que les $_SESSION en php)?

    J'espère que j'ai été clair dans mes questions. Si jamais ce n'est pas le cas, n'hésiter pas à me le signaler et je saurais vous expliquer.

    Alors voilà, plein de questions mais je suis sûr que je ne suis pas le seul à me les poser, vue le nombre de gens qui débute avec le Framework GWT et la nature de mes questions (que l'on se pose à première vue si on a fait de la programmation web à l'ancienne).

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 72
    Par défaut
    Je me permet de répondre avec mes quelques connaissances mais je trouve votre sujet très intéressant pour un débutant comme moi

    1 - Cependant une question me taraude: comment faire pour avoir une url différente dans le navigateur à chaque fois? si je fais comme je l'ai décrit au début, j'aurais toujours comme url http://...:8080/Projet.html

    2 - Comment peut-on avoir par exemple http://....:8080/login pour la page d'authentification et http://....:8080/Accueil pour les données après s'être identifié?

    3 - Et si jamais on fait ce genre d'adressage, le jour ou je tape http://....:8080/Accueil je n'aurais pas besoin de vérifier si je suis bien identifier ou pas (dans le même esprit que les $_SESSION en php)?
    1 - oui vous aurez toujours cette url si c'est toujours la même page avec le contenu qui varie

    2 - Je pense qu'il faut d'autres pages pour avoir ces urls (et donc d'autres points d'entrée et d'autres classes).
    En fait je crois qu'il faut surtout penser en terme de "module" avec GWT.
    Vous avez votre module de connexion qui regroupe dans une page l'ensemble du comportement lié au login de votre utilisateur . Ensuite vous pouvez avoir un module pour un autre ensemble d'action (par exemple un module Admin pour faire toutes les actions d'administration etc )

    3 - aucune idée mais il doit bien exister une sorte de SESSION comme avec php ... en tout cas la réponse m'intéresse

  5. #5
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Il est bien entendu possible de faire un module par page mais c'est programmer à l'ancienne.

    Avec gwt, une seule page et donc une seule url.

    Si le besoin se fait sentir d'avoir plusieurs url pour afficher des blocs différents, il faut passer par le mécanisme d'historique et les liens interne à la page.

    Ainsi, une seule adresse : http://domaine.com/gui
    et des adresses de blocs :
    http://domaine.com/gui#login
    http://domaine.com/gui#accueil
    si on veut pouvoir utiliser l'historique.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut
    J'ai essayé hier soir et aujourd'hui de remplacer, après s'être identifié avec succès, le petit widget d'authentification par un autre élément. Mais ça ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void changeView(){
     
    		Element body = RootPanel.getBodyElement();
    		System.out.println(body.getElementsByTagName("p").getItem(0).getTagName()); //retourne bien p, la balise contenant un titre
     
    		body.removeChild((Node)body.getElementsByTagName("p").getItem(0));
    //Rien ne se passe au niveau de l'affichage
     
    		Home home = new Home();
    		home.createElements("3");
    	}
    Je ne comprend pas ce qui se passe?? C'est juste le onModuleLoad() qui agit sur la page html ou quoi?

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void onModuleLoad() {
    		UserLogin userPanel = new UserLogin();
    		userPanel.generateLoginView();
    	}
    Je me suis peut être trompé au niveau de la méthode de suppression du noeud. En tout cas je ne trouve pas de piste pour le moment en essayant de corriger l'exception que j'ai eu:

    com.google.gwt.core.client.JavaScriptException: (Error): Argument non valide.
    number: -2147024809
    description: Argument non valide.
    at com.google.gwt.dom.client.Node$.removeChild$(Native Method)
    at com.db.project.client.Home.changeView(Home.java:25)
    at com.db.project.client.UserLogin$1.onSuccess(UserLogin.java:63)
    at com.db.project.client.UserLogin$1.onSuccess(UserLogin.java:1)
    at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:215)
    at com.google.gwt.http.client.Request.fireOnResponseReceivedImpl(Request.java:264)
    at com.google.gwt.http.client.Request.fireOnResponseReceivedAndCatch(Request.java:236)
    at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:227)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut
    Bon, pour le moment je vais utiliser RootPanel.get().clear();

    Ce n'est pas très propre mais si quelqu'un a des suggestions, c'est toujours le bien venu pour bien selectionner les éléments qu'on a envie de supprimer.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut RootPanel.get().clear() ne fonctionne plus
    Bonjour à tous,

    je relance cette discussion car j'ai un petit problème.

    J'ai parlé un petit peu de ce que je veux faire et maintenant je suis bloqué dans l'affichage. Quand je clique sur le bouton d'identification je veux virer le widget de l'identification et afficher de nouvelles composantes. Le problème c'est que le RootPanel.get().clear() ne vire plus les anciennes composantes avant l'affichage des nouvelles.

    Les nouvelles composantes s'ajoutent aux vieilles. Si quelqu'un pourra m'aider ça serait vraiment cool.

    J'attends vos réponses.

    Cordialement

  9. #9
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Fais voir ton code car RootPanel.get().clear() efface bien l'ensemble des enfants.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut
    J'ai changé en RootPanel.get("firstForm").clear(); et ça marche. firstForm c'est l'id du widget de l'authentification.

    Si jamais je bloque dans ce que je vais faire maintenant, je compte sur vous.

    (c'est une histoire de paramétrage pour envoyer la requête sur un réseau extérieur, et non plus local)

Discussions similaires

  1. passer des valeurs d'une page à l'autre
    Par casaoui dans le forum ASP.NET
    Réponses: 8
    Dernier message: 13/06/2007, 17h55
  2. [débutant]Passer des variables d'une page à une autre
    Par MayOL69bg dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/03/2007, 10h53
  3. passer des argument d'une page à une autre
    Par awatif dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 21/09/2006, 12h41
  4. [JSP] Passer un objet d'une page à une autre
    Par critok dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 07/07/2006, 14h24
  5. [Tableaux] passer un array d'une page à une autre
    Par 18Marie dans le forum Langage
    Réponses: 5
    Dernier message: 25/06/2006, 22h42

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