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

Struts 1 Java Discussion :

Changer l'url après validation d'un ActionForm


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 15
    Par défaut Changer l'url après validation d'un ActionForm
    Bonjour,

    J'ai un formulaire trés simple décrit de la manière suivante dans mon fichier struts-config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form-bean name="FormulaireAjoutAdresseMAC" type="page.mac.FormulaireAjout">
    	<form-property name="adresseMAC" type="java.lang.String" initial=""/>
    </form-bean>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <html:form action="/adresse-mac/ajouter" method="post" >
    	Adresse : <html:text property="adresseMAC" />
    	<html:submit value="Ajouter"/>
    </html:form>
    J'ai crée une action permettant de traiter ce formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <action
    	path="/adresse-mac/traiter-formulaire"
    	name="FormulaireAjoutAdresseMAC"
    	scope="request"
    	validate="true"
    	input="/adresse-mac/erreurs.do"
    	parameter="/adresse-mac.do"
    	type="org.apache.struts.actions.ForwardAction"
    />
    En l'état le comportement de mon petit programme est le suivant : Lorsque je clique sur le bouton Ajouter de mon formulaire, la méthode validate de ma classe FormulaireAjout est appelée.
    En cas d'erreur : redirection vers /adresse-mac/erreurs.do
    En cas de réussite : redirection vers /adresse-mac.do

    Seulement voilà, lors de la redirection, l'url obtenue est celle de l'action /adresse-mac/traiter-formulaire (http://.../adresse-mac/traiter-formulaire.do) ce qui casse la plupart des liens de la page jsp mappée sur l'action /adresse-mac. J'ai donc besoin que la redirection soit absolue et me permette d'obtenir http://.../adresse-mac.do ou http://.../adresse-mac/erreurs.do

    Pour une action classique, j'ai lu qu'il suffisait de faire des <forward> avec redirect="true" mais dans le cas présent j'ignore totalement comment rediriger correctement vers /adresse-mac.do ou /adresse-mac/erreurs.do

    Des idées ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Par défaut
    Seulement voilà, lors de la redirection, l'url obtenue est celle de l'action /adresse-mac/traiter-formulaire (http://.../adresse-mac/traiter-formulaire.do) ce qui casse la plupart des liens de la page jsp mappée sur l'action /adresse-mac. J'ai donc besoin que la redirection soit absolue et me permette d'obtenir http://.../adresse-mac.do ou http://.../adresse-mac/erreurs.do
    Je n'ai pas du tout compris "ce qui casse la plupart des liens de la page jsp".
    Et que veux tu dire par "l'url obtenue".

    Pour une action classique, j'ai lu qu'il suffisait de faire des <forward> avec redirect="true" mais dans le cas présent j'ignore totalement comment rediriger correctement vers /adresse-mac.do ou /adresse-mac/erreurs.do
    Je ne pense pas que le redirect ait quelque chose à voir là dedans à première vue.

  3. #3
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Si c'est un problème d'url relative ou absolue, tu peux ajouter le tag <html:base/> dans la balise <head> de tes jsp qui permet d'utiliser des url relatives basées sur l'url de la page elle-même.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Par défaut
    Pour ma part j'ai toujours travaillé dans mes JSP en URL absolue en prenant soin de concaténer le context path à une URL relative.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    src="<%= request.getContextPath() %>/user/desktop.do"
    Je ne sais pas sis c'est une bonne habitude mais j'ai appris comme ça.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 15
    Par défaut
    Tout d'abord merci pour vos réponses.

    Mon problème ne se situe pas dans le fait que les url soient relatives ou non. Les url absolues seraient toutefois une solution (et je pense qu'à terme je vais opter pour çà, avec des EL) mais j'aimerais quand même, par curiosité, savoir s'il existe une solution qui répondent à mon raisonnement initial (permettre de rediriger au niveau de l'input).
    Le html:base me paraît être aussi un moyen plus pratique de fonctionner en absolu sans alourdir les liens.

    En fait, mon problème se situait dans le fait que l'attribut "input" ne permet pas de définir si l'on désire effectuer une réexpedition (forward) ou une redirection, comme ce serait normalement le cas avec une action classique de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <action ...>
    	<forward ... redirect="true/false" />
    </action>
    En cherchant, j'ai tout de même pu trouver une piste de réflexion dans un bouquin (cf Jakarta Struts, collection Précis et concis).
    En effet, il existe un attribut de la balise controller qui permet d'utiliser des actions au sein d'un input.

    Ainsi l'instruction <controller inputForward="true" /> permet d'écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <action
    	path="/adresse-mac/traiter-formulaire"
    	name="FormulaireAjoutAdresseMAC"
    	scope="request"
    	validate="true"
    	input="monForward"
    	parameter="/adresse-mac.do"
    	type="org.apache.struts.actions.ForwardAction"
    >
    	<forward name="monForward" path="/adresse-mac/erreurs.do" redirect="true/false">
    </action>
    Après test, ça fonctionne au niveau de la redirection, mais pour une raison que j'ignore, le fait d'utiliser une redirection au lieu d'une réexpédition entraîne la perte des informations d'erreurs. Et là je sèche complètement .

    Enfin, au final, je pense que je vais changer la structure de ma gestion d'erreurs en quelque chose de moins exotique que ce que j'avais prévu au départ.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Par défaut
    Tout d'abord une question : pourquoi tiens tu absolument à fonctionner en mode "redirect" ?

    Après test, ça fonctionne au niveau de la redirection, mais pour une raison que j'ignore, le fait d'utiliser une redirection au lieu d'une réexpédition entraîne la perte des informations d'erreurs. Et là je sèche complètement .
    Cela me parrait normal. Le mode redirect envoie un message au client web (le navigateur) afin que celui ci regénère une requête HTTP vers la ressource désirée. Le fait de changer de requête HTTP fait que tu perds ce qui était présent en attribut de la requête précédente (en l'occurrence tes erreurs).

    La vrai question à se poser est : pourquoi redirect ?

Discussions similaires

  1. Changer l'url après une action
    Par Nandou56 dans le forum Struts 1
    Réponses: 1
    Dernier message: 17/09/2012, 02h36
  2. Redirection vers URL après validation
    Par YG210844 dans le forum Struts 2
    Réponses: 1
    Dernier message: 25/08/2011, 17h25
  3. Exécuter une url après validation
    Par toony.m dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/04/2008, 14h13
  4. Formulaire : changer de page après avoir validé
    Par shaynee dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/01/2007, 10h38
  5. [Struts] changer l'url affiché apres un forward
    Par mauvais_karma dans le forum Struts 1
    Réponses: 5
    Dernier message: 31/08/2005, 13h31

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