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

Seam Java Discussion :

Utilisation des Nested Conversations


Sujet :

Seam Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut Utilisation des Nested Conversations
    Bonjour,

    je débute avec JBoss Seam (et en programmation Web en général), et je bloque sur un problème apparemment simple : la réutilisation de use-cases.

    Je m'explique, avec un exemple : j'ai trois entités, mettons un Pays, une Région et une Personne.
    Une personne est née dans un Pays, une Région fait partie d'un Pays.
    On peut donc affecter un Pays à ces entités. Jusque-là, tout va bien.

    Je veux aussi pouvoir créer un Pays qui n'est pas encore listé, à partir de la page d'édition de ces entités.

    J'ai donc un bouton "créer pays" qui m'envoie sur le formulaire de création adéquate. Par contre, impossible de revenir au process appelant, c'est à dire soit à la page d'édition de la Personne, soit à celle de la Région.

    Le bouton "créer" est cablé vers la méthode countryHome.create().
    Cette méthode est taggée :Une méthode countryHome.end() enregistre la saisie et achève la conversation.
    Mon soucis est que si elle retourne une viewID, cette viewID est appelée et non celle de la conversation mère. Si je ne revoie rien, j'ai un simple refresh de la page courante, i.e. celle d'édition du pays.
    L'utilisation de EndBeforeRedirect n'a pas eu d'effet, alors que la conversation parente aurait dû être réactivée, et donc remplacer la viewID courante.

    Quelqu'un aurait-il une idée sur la bonne utilisation des conversations dans ce cas ?

    Merci d'avance.



    Note: l'exemple seam-issues fourni utilise les conversations "joined" et "nested", mais n'est pas documentée et trop complexe pour moi.
    La documentation de référence n'est pas très bavarde sur le sujet ("ça marche tout seul").
    Enfin, j'ai lu que Seam ne se souvient pas (encore) automatiquement de la dernière vue au lancement d'une conversation, si cette vue n'appartenait pas à une conversation. Mais ce n'est pas mon cas : mon appel est déjà (normalement) dans le cadre d'une conversation existante...

    Vous pourrez trouver un exemple encore plus simple de mon propos sur http://www.malova.fr/musicdb
    Il y a une page de liste de régions. Lorsqu'une région est éditée/créée, une conversation se lance et on peut ajouter un Pays. Lorsque le pays est ajouté, clicker sur "Done" renvoie à la liste des pays, et non à l'édition de notre région. Et je tiens à ce mode de fonctionnement, et non pas à "assurez-vous que le pays existe avant de créer une région". Ce serait à s'arracher les cheveux dans l'appli que je souhaite monter.

    Merci pour votre aide,

    Jean

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    Tu dois garder une refence du viewID de la page dont tu viens (stocke dans la nested conversation par exemple) puis retourner cette viewId quand tu termines la nested conversation.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut
    Merci Thomas pour cette réponse.

    Si j'ai bien compris, il faudrait que modifie CountryHome par quelque chose du style :
    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
     
    // cas général : appel direct
    private String doneOutcome = "countryList";
     
    @Begin(nested=true)
    public String create(){
       ...
       doneOutcome = Conversation.getCurrentViewId();
       return "country";
    }
     
    @End
    public String done(){
       // retour à countryList dans le cas normal ou à la page appelante si nested
       return doneOutcome;
    }
    (je n'ai pas en tête le détail des classes de Seam, mais il me semble que ça doit exister)

    Je vais tester ça.

    Par contre, je ne vois plus tellement l'intérêt des nested conversations, et encore moins du end before redirect...

    Merci pour le conseil,

    Jean

  4. #4
    Membre éprouvé
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    Tu as essaye endAndRedirect() ?

  5. #5
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut
    Citation Envoyé par theute
    Tu as essaye endAndRedirect() ?
    Je me rends compte que je ne sais pas trop comment il faut que j'appelle cette nested conv. Pour l'instant, j'ai :
    region.xhtml : formulaire de création d'une région -> appel création d'un pays
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <h:commandButton id="newCountry" value="New..." action="#{regionHome.newCountry}" />
    regionHome.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public String newCountry(){
            Redirect redirect = (Redirect)Component.getInstance("redirect");
            redirect.captureCurrentView();
     
            return "/country.xhtml";
        }
    country.xhtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                <h:commandButton id="test" value="Test" 
                    action="#{countryHome.exit}"
                    rendered="#{countryHome.managed}"/>
    Et enfin, dans CountryHome.java :
    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
     
        public void exit(){
        	Conversation currentConversation = Conversation.instance();
               Redirect redirect = (Redirect)Component.getInstance("redirect");
        	if(currentConversation.isNested()){
        		System.out.print("Country Creation Nested");
        	}else{
        		System.out.print("Country Creation NOT nested");
        	}
    //    	currentConversation.endBeforeRedirect();
    //    	currentConversation.redirectToParent();
    //    	currentConversation.end();
        	currentConversation.endAndRedirect();
    //    	System.out.print("Parent conversation : "+currentConversation.
            // Have a chance here to modify the redirect.setParameters() for the following GET, e.g.
            // strip off the action=(addNote) parameter which would lead me into a circle
    //        redirect.returnToCapturedView();
     
        }
    La trace indique bien que la conversation est Nested.

    L'annotation @End(beforeRedirect) ne donne rien. Si elle est Void, ça rafraîchit, si elle retourne String, elle redirige vers la viewID spécifiée.

    currentConversation.endAndRedirect(); me renvoie sur /country.seam?cid=3&parentConversationId=2

    endBeforeRedirect(); me renvoie sur /country.seam

    Dans le cas où j'ai capturé la vue dans newCountry(), alors redirect.returnToCapturedView(); revoie sur /country.seam.

    Moralité (je n'ai pas encore testé ta première solution), pas moyen de retrouver automatiquement "region.seam", avec la conversation restaurée ni a fortiori les valeurs éventuellement déjà renseignées.

    Si ce n'est pas abuser, serait-il possible de m'envoyer un exemple en qq lignes ?

    Merci,

    Jean

  6. #6
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut
    Je souhaite revenir sur le conseil qui m'est donné de m'inspirer de l'exemple Seam Issues.

    Tout d'abord, il est un poil trop compliqué pour moi, et n'est pas documenté.

    Et surtout, les vues de retour sont prédéterminées :
    C'est simple, soit l'issue est créée directement, soit elle est créée depuis un projet (nested). À chaque point d'entrée correspond une méthode spécifique, où l'outcome final est hardcodé.

    Il n'y a donc pas de retour automatique à l'appelant, ce qui est précisément mon besoin.

    Sachant que normalement ce retour devrait être automatique, et que j'ai même tenté de bidouiller avec endAndRedirect() etc... quelqu'un aurait-il une idée ?

    Merci d'avance,

    Jean

    PS: je vois que l'exemple Seam Issues est supprimé de Seam1.3.0-Alpha.
    Est-ce un signe ?...

Discussions similaires

  1. Bonne utilisation des fonctions de conversion
    Par legentil dans le forum Langage
    Réponses: 2
    Dernier message: 23/04/2012, 20h13
  2. [CR8.5] Utilisation des codes barre
    Par Robert dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 20/01/2005, 16h13
  3. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24
  4. [Crystal Report] Utilisation des vues de sql serveur
    Par Olivierakadev dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 15/11/2002, 17h44
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

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