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 :

Méthode redirect ne fonctionne pas


Sujet :

JSF Java

  1. #1
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut Méthode redirect ne fonctionne pas
    Bonjour,

    Dans le managedBean associé à une page, j'a une méthode init (@postConstruct) dans laquelle je teste si l'objet que je veux modifier est bien toujours en base de données.
    S'il ne l'est plus, j'aimerais rediriger l'utilisateur vers une autre page.

    Le problème est que ma redirection ne fonctionne pas
    Voici la méthode en question:

    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
    @PostConstruct
    	public void init() {
    		FacesContext context = FacesContext.getCurrentInstance();
    		ExternalContext externalContext = context.getExternalContext();
    
    		Map<String, String> params = externalContext.getRequestParameterMap();
    		String idDomaine = params.get("idDomaine");
    
    		if (idDomaine != null) {
    			currentDomaine = m_societeService.getDomaineCompetence(Integer
    					.valueOf(idDomaine));
    			
    			// Test au cas ou un autre utilisateur aurait supprimé entre temps le domaine de compétence
    			if (currentDomaine == null) {
    				HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    
    				String contextPath = ((HttpServletRequest) request).getContextPath();
    				try {
    					externalContext.redirect(contextPath + IUrlLocation.URL_GESTION_DOMAINES_COMPETENCES);				
                                     } catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    		} else {
    			// Initialise la séquence de tri
    			Long nb = m_societeService.countDomaineCompetences();
    			int seqTri = 10;
    			if (nb != null && nb > 0) {
    				seqTri = (nb.intValue() + 1) * 10;
    			}
    			
    			currentDomaine = new DomaineCompetence();
    			currentDomaine.setSeqTri(seqTri);
    		}
    	}
    Qqun sait-il pourquoi ça ne marche pas ?
    Merci d'avance pour votre aide

  2. #2
    Membre du Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2013
    Messages : 117
    Points : 46
    Points
    46
    Par défaut
    Pour les redirections, je préfère personnellement retourner un String contenant l'URL sur laquelle tu veux etre redirigé.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public String init(){
      String redirection = "/web/taPage.xhtml?faces-redirect=true";
      ...
      ...
      Return redirection;
    }

  3. #3
    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
    Faire un redirect dans un PostConstruct, c'est dangereux. Tu devrais faire ton test dans ton action. Tu ne sais jamais quand ton postconstruct va être appelé. Ca pourrait être dans n'importe quel phase à n'importe quel moment. Si il est appelé en fin de rendering, il est trop tard pour faire une redirection par exemple.


    Enfin, quand tu fais un redirect, il ne faut pas oublier l'appel à FacesContext.responsComplete() pour arrêter le travail de JSF.

  4. #4
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    En fait mon action est un simple link :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <p:link outcome="saisirIdentite" styleClass="ui-icon ui-icon-action-modifier" >
           <f:param name="idIdentite" value="#{identite.id}" />
    </p:link>
    1. Du coup comment je peux faire le test ? Il faut que je change en commandLink et appelle une méthode de mon bean avec le paramètre "action=..." qui va faire le test et rediriger selon la valeur du test, c'est bien ça ?

    2. Je ne connaissais pas la méthode FacesContext.responsComplete() .... il faut la mettre juste avant la redirection j'imagine ?

    @GDS_Strou : une méthode annotée @PostConstruct ne peut pas retourner de valeur, donc pas de string de redirection.

    Merci pour votre aide

  5. #5
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    salut ,
    voici un exemple:
    dans la classe bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void redirect() throws IOException{
            FacesContext context = FacesContext.getCurrentInstance();
            HttpServletResponse response =(HttpServletResponse)context.getExternalContext().getResponse();
            response.sendRedirect("index.jsf");
            context.responseComplete();
        }
    et dans une page test.xhtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:h="http://java.sun.com/jsf/html">
    <f:metadata>
      <f:event type="preRenderView" listener="#{taBean.redirect()}" />
     </f:metadata>
    </html>
    Eric

  6. #6
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    D'accord

    En fait je fais le test dans la méthode redirect et fais soit la redirection s'il y a lieu de la faire et sinon je ne fais rien ? C'est bien ça

  7. #7
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    J'ai mis en place comme proposé dans le poste précédent et ca marche bien

    Merci beaucoup pour votre aide à tous

  8. #8
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Affichage de slide power point dans une application web avec Java EE
    Bonjour tout monde

    Je veux afficher des slides dans mon application Java EE. J'utilise le framework primeface pour les vues. Si quelqu'un peut m'aider.

    SVP

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/05/2014, 12h21
  2. méthode OfType() ne fonctionne pas
    Par maa dans le forum C#
    Réponses: 7
    Dernier message: 21/01/2008, 09h12
  3. redirections ne fonctionne pas
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 22/09/2006, 10h05
  4. [CSV] Redirection ne fonctionne pas
    Par Brizzio dans le forum Langage
    Réponses: 12
    Dernier message: 16/12/2005, 10h55
  5. [DOS] Redirection ne fonctionne pas
    Par Pedro dans le forum Langage
    Réponses: 15
    Dernier message: 13/06/2005, 08h45

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