Paramètres de page

Résolu
Bonjour,

J'ai un petit problème que je vais vous expliquer.

Soit une page A possédant un bouton de commande permettant de charger une page B en lui indiquant des paramètres via l'url. (Cette page marche parfaitement).

Ce que je dois faire c'est mettre une page que j'appellerai X entre A et B.

Donc mes paramètres doivent faire A->X puis X->B.
Hors il s'avère que mes paramètres vont de A vers X mais quand j'appelle dans le code pour X vers B, les paramètres sont nuls :/

Mon code pour les paramètres :
try {
			FacesContext fc = FacesContext.getCurrentInstance();
			Map<String, String> params1 = fc.getExternalContext().getRequestParameterMap();
			nomPresse = params1.get("nomPresse");
			nomMoule = params1.get("nomMoule");
			nomReference = params1.get("nomReference");
			nomEquipe = params1.get("nomEquipe");
			nomEquipe = nomEquipe.substring(1);
			nomEquipe = "É" + nomEquipe;
			if (nomPresse != null) {
				accueil = true;
			}
			// fnc.setNiveau_fnc(10);
		} catch (Exception e) {
			System.out.print("Fnc créer depuis la page ajouter une FNC!");
		}


Je développe en JEE sur la plate forme Eclipse Mars.

Merci d'avance pour l'aide :)

--
Aucun navigateur ne propose d'extension boule-de-cristal : postez des informations pour avoir de l'aide...

1 réponse

  1. Modérateur
    Bonjour,

    Tout d'abord je ne connais pas JSF, donc ça va rester théorique...

    Tu ne devrais pas faire confiance à ta page X pour te renvoyer les infos de la page A quand tu en auras besoin dans B. Si tu as besoin de ces données, stocke les sur le serveur au moment A→X et récupère les au moment X→B tu auras la garantie que ces données n'ont pas été corrompu entre A et B.

    Sinon, tu peux utiliser un cookie, A→X créé un cookie, et X→B le récupère, ça te permet de faire transiter des données sans passer par les paramètres de GET/POST, mais attention: un cookie peut être modifié, il n'y a donc pas l'absolu certitude que ce sont bien les même données que celles de A.
    0
    1. Ok je vois ce que tu veux dire. Il faudrait donc que je déclare des variables internes pour le transit des données.
      0
    2. me revoila, je n'ai pas réussis à passer par une variable car le bean se réinitialise à chaque fois (il fait son job quoi).
      J'ai trouvé comme formule :
      String tst = request.getParameter("i"); 

      Sur des forums java mais je ne peux pas l'utiliser, je ne comprends pas :/
      0
    3. Modérateur
      Essayes ceci (je fais ça de tête, il faudra peut être adapter un peu)

      FacesContext fc = FacesContext.getCurrentInstance();
      ExternalContext ec = fc.getExternalContext();
      HttpSession session = ec.getSession();
      
      // écriture des paramètres en session (A → X)
      Map<String, String> params = ec.getRequestParameterMap();
      session.setAttribute("previousParameters", params);
      
      // récupération des paramètres dans la session (X → B)
      Map<String, String> params = session.getAttribute("previousParameters");
      0
    4. http://localhost:8080/GmaoMoulage/creation/creation.jsf?nomPresse=100&nomMoule=290 54 308&nomReference=S773700&nomEquipe= quipe A

      J'ai ça comme paramètres donc 4 variables transmises.
      Map<String, String> params = session.getAttribute("previousParameters");

      Je pourrai récupérer tous les paramètres avec cette ligne?
      0
    5. Modérateur
      Non, mais j'avoue que je t'ai donné du code sans explication...

      Lors de la connexion d'un utilisateur tu peux lui attribuer une session sur le serveur.
      Tant que la session est valide (elle expire au bout d'un certain temps - la durée est configurable) chaque requête sera traitée par la même session, tu peux donc stocker des valeurs dans cette session lors d'une première requête pour les récupérer lors des requêtes suivantes.

      Par exemple : si tu t'enregistres sur un site web avec un login/mot de passe, généralement tu peux travailler plusieurs heures sans avoir besoin de te reconnecter.

      Techniquement l'identifiant de la session est transmis dans un cookie "jsessionid" lors de la création de la session et récupéré à chaque fois pour retrouver la session sur le serveur.

      Voir : Servlets - Gestion des sessions

      Dans l'exemple de code que j'ai donné, je récupère les paramètres de ta requête (la Map), je les stockes tel quel dans la session, et à la requête suivante je les récupères, comme s'ils venaient de m'être transmis alors qu'en fait ils m'ont été transmis à la requête précédente.

      Remarque : j'aurais pu être plus fin, et au lieu de stocker toute la Map en session, stocker individuellement chaque paramètre nomPresse, nomMoule, etc.
      0