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 :

Restaurer soi-même une view


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de VirageGroup
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 81
    Par défaut Restaurer soi-même une view
    Voici le problème,

    Comment restaurer la dernière view JSF qui correspond à l'URL demandée même s'il n'y a pas de viewStateId disponible ?

    Nous utilisons le <redirect/> dans nos règles de navigations et donc les requêtes qui proviennent du navigateur sont des GET.
    Si l'utilisateur clique sur "actualiser" la requête "GET" est renvoyée et une nouvelle instance de la view est créée.

    L'idée est de restaurer la dernière instance créée de cette view plutôt que d'en recréer une nouvelle.

    Quelqu'un a t'il déjà eu ce genre problème à résoudre ?

    VG.

  2. #2
    Membre éclairé Avatar de VirageGroup
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 81
    Par défaut
    Voilà ma façon de faire. Il faut utiliser JSF sun RI (1.2_8) et richfaces (3.3.1)

    Dans un PhaseListener apres la phase "render view":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ExternalContext externalContext = event.getFacesContext().getExternalContext();
     
    //caution : RichFaces specific
    Object viewSeq = externalContext.getRequestMap().get(AjaxStateManager.VIEW_SEQUENCE);
    if (viewSeq != null){
    	externalContext.getSessionMap().put(LAST_VIEW_STATE, viewSeq);
    }
    puis dans un phase listener "before restore view":
    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
     
    ExternalContext extCtx = facesCtx.getExternalContext();
     
    boolean postback = !extCtx.getRequestParameterMap().isEmpty()
                                        &&  extCtx.getRequestParameterMap().containsKey(ResponseStateManager.VIEW_STATE_PARAM);
    if (!postback){
                	// mus be a GET
                	Object request = extCtx.getRequest();
                	if (request instanceof HttpServletRequest) {
                		String viewId = ((HttpServletRequest) request).getServletPath();
     
    	                Object viewState = extCtx.getSessionMap().get(LAST_VIEW_STATE);
     
                if (viewState != null){
                	//caution: JSF Sun RI specific
            	RequestStateManager.set(facesCtx,
    		                     RequestStateManager.FACES_VIEW_STRUCTURE, viewState);
     
     
    facesCtx.getApplication().getViewHandler().restoreView(facesCtx, viewId);
            }
        }
    }
    VG.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/04/2013, 16h26
  2. [Liferay] Modifier une portlet créé sois même(et non fourni par liferay)
    Par ckalubi dans le forum Portails
    Réponses: 5
    Dernier message: 12/11/2009, 15h03
  3. une association vers soi-même ?
    Par steve_toulouse dans le forum Hibernate
    Réponses: 1
    Dernier message: 06/10/2006, 12h05

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