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 :

redirection sur une action qui ne marche pas


Sujet :

Struts 1 Java

  1. #1
    Membre habitué Avatar de nesbla
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 220
    Points : 139
    Points
    139
    Par défaut redirection sur une action qui ne marche pas
    Bonjour,

    Dans l'absolu, je souhaiterai que lorsque j'arrive sur ma page index, son "IndexAction" soit déclenché afin d'initialiser les valeurs de son "IndexForm" et de les afficher dans la page (je sais pas si j'suis clair ).

    Tout cela n'étant visblement pas possible directement, j'ai crée une page jsp redirectIndex qui contient cette redirection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <logic:forward name="index"/>
    Le but de cette page et de déclencher l'IndexAction qui lui initialise IndexForm avec les valeurs que je souhaites et redirige vers le vrai index.jsp qui affiche ces valeurs (en théorie...).

    voila mon fichier struts-config.xml :

    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
    38
    39
    40
    41
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC
                    "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
                    "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
    <struts-config>
    	<form-beans>
    		<form-bean name="LoginForm"
    			type="com.nesbla.fastornot.web.Form.LoginForm" />
    		<form-bean name="IndexForm"
    			type="com.nesbla.fastornot.web.Form.IndexForm" />
    		<form-bean name="InscriptionForm"
    			type="com.nesbla.fastornot.web.Form.InscriptionForm" />
    		<form-bean name="NotationForm"
    			type="com.nesbla.fastornot.web.Form.NotationForm" />
    	</form-beans>
     
    	<global-forwards>
    		<forward name="Connected" path="/Connected.jsp" />
    		<forward name="InscriptionConfirm"
    			path="/InscriptionConfirm.jsp" />
    		<forward name="index" path="/index.jsp" />
    	</global-forwards>
     
    	<action-mappings>
    		<action path="/login" name="LoginForm"
    			type="com.nesbla.fastornot.web.Action.LoginAction" scope="request">
    		</action>
    		<action path="/notation" name="NotationForm"
    			type="com.nesbla.fastornot.web.Action.NotationAction"
    			scope="request">
    		</action>
    		<action path="/index" name="IndexForm"
    			type="com.nesbla.fastornot.web.Action.IndexAction" scope="request">
    		</action>
    		<action path="/inscription" name="InscriptionForm"
    			type="com.nesbla.fastornot.web.Action.InscriptionAction"
    			input="/Inscription.jsp" validate="true">
    		</action>
    	</action-mappings>
     
    </struts-config>
    et voila mon fichier IndexAction :

    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
    public class IndexAction extends Action {
     
    	public ActionForward execute(
    			ActionMapping mapping, ActionForm _form,
    			HttpServletRequest request, HttpServletResponse response
    	) throws Exception {
     
    		// Récupère les données du formulaire.				
    		IndexForm form = (IndexForm) _form;		
     
    		// Définit la photo aléatoire.
    		PhotoDao photoDao = new PhotoDao();
    		form.setPhoto(photoDao.getRandom());
     
    		return mapping.findForward("index");		
    	}
    }
    ansi que mon IndexForm :

    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
    public class IndexForm extends ActionForm {
     
    	private static final long serialVersionUID = -6546500330056182574L;
    	private Photo _photo;
    	private String _test="test";	
    	public String getTest() {
    		return _test;
    	}
    	public void setTest(String test) {
    		_test = test;
    	}
    	public Photo getPhoto() {
    		return _photo;
    	}	
    	public void setPhoto(Photo photo) {
    		_photo = photo;
    	}
    }
    et enfin mon fichier index.jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test = <bean:write name="IndexForm" property="test"/>
    Donc au final, ce que je ne comprend pas, c'est que lorsque je vais sur ma page redirectIndex.jsp il semble executer l'IndexAction et il effectue correctement la redirection vers ma page index.jsp. Cependant celle-ci déclenche une erreur disant qu'il ne trouve pas le bean "IndexForm"... Etrange puisque celui-ci est correctement définit dans mon fichier struts-config et que j'opère de la même manière pour les autres pages et que ça marche.

    voila l'erreur (qui est causé par mon <bean:write/>) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.ServletException: Cannot find bean: "IndexForm" in any scope
    La question que je me pose c'est de savoir si lorsque je passe dans mon IndexAction ca initialise correctement mon IndexForm. Je débute sous Struts donc je m'y prends peut être mal pour arriver à mes fins.

    Je suis tout ouïe à vos recommandations et eventuelles solutions.

    Merci

  2. #2
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    J'ai pas tout lu mais premiere chose qui me choque :

    Tu n'as pas de forward dans la définition de tes actions (dans le struts-config).
    plutot que ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <action path="/login" name="LoginForm" type="com.nesbla.fastornot.web.Action.LoginAction" scope="request">
    </action>
    je verrais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <action path="/login" name="LoginForm" type="com.nesbla.fastornot.web.Action.LoginAction" scope="request">
      <forward name="index" path="/index.jsp"/> 
    </action>
    Idem pour le global forward.

    Plutot que ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <forward name="index" path="/index.jsp" />
    Je verrais plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <forward name="index" path="/index.do" />
    Dans l'absolu cela te permet si tu fais un forward dans une JSP (la ca utilisera les global forward) de pointer vers ton action index.do qui elle même ferra un forward (interne cette fois-ci) vers index.jsp.

  3. #3
    Membre habitué Avatar de nesbla
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 220
    Points : 139
    Points
    139
    Par défaut
    Concerant le <forward> dans les balises <action> je ne comprends pas trop ce que ça va changer puisque j'ai mis ma redirection dans le </global-forwards>. Peut-être que j'ai mal compris comment ça s'utilise, je ne sais pas.

    Avec mon code, j'arrive bien à faire la redirection (redirectIndex.jsp -> IndexAction -> index.jsp), ça ça marche. Par contre mon soucis est que mon index.jsp ne peut pas acceder aux valeurs de l'IndexForm. C'est surtout ce point là que je ne comprends pas.

    Pour vérifier que je passe bine par mon indexAction j'ai mis un lien qui n'existe pas dans mon findForward du IndexAction et ça me déclenche bien une erreur : c'est donc que je passe dans l'action et donc mon IndexForm est censé être initialisé avec mes valeurs...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return mapping.findForward("liennonexistant");
    La question est : Pourquoi je n'y accéde pas ??

  4. #4
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Le globalForward permet de faire des forward qui soient appellables de n'importe ou (jsp, actions).
    C'est interessant par exemple quand tu veux balancer les gens sur une JSP qui peut apparaitre souvent (dans mon cas, c'est la page 403.jsp), ou dans le cas que tu cite, à savoir définir le premier point de chute.

    La, tu as défini que le global-forward qui s'appelle "index" redirige vers /index.jsp, donc si tu fais un mapping.findForward("index"), tu va aller directement sur ta jsp (à utiliser comme tu l'a fait dans ton action donc)

    Mais dans ta Jsp, c'est pareil, tu demande un forward vers "index" avec un logic:forward (donc equivalent à mapping.findforward si je dis pas de betises) -> ca envoie donc directement vers la jsp index.jsp sans passer par l'action...


    Pour que ca marche, il faudrait effectivement faire comme l'a dit yolepro...
    Un global-forward qui redirige vers ton action index (donc de la forme index.do), et un forward spécifique à ton action qui redirige vers la jsp à afficher une fois l'action terminée.
    Et j'ajouterai tant qu'à faire qu'il serai aussi pas mal d'éviter d'avoir un global-forward et un forward ayant le même nom (je sais pas si ca pose probleme, mais pour la logique générale, j'aurai tendance à éviter)


    (pour voir si tu passe quelque part en général, la meilleure solution et de mettre des trucs dans le log ou de faire un System.out.println(), voir meme de mettre un point d'arret)

  5. #5
    Membre habitué Avatar de nesbla
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 220
    Points : 139
    Points
    139
    Par défaut
    Merci, je commence à voir d'où pourrait venir le problème . J'avais pas bien compris au début...Je vais faire des tests dès que je peux et je vous tiendrais informé si c'est bon.

    Merci encore !

  6. #6
    Membre habitué Avatar de nesbla
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 220
    Points : 139
    Points
    139
    Par défaut
    C'est bon ca marche impec quand je met un index.do dans le global forward.

    Merci !

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

Discussions similaires

  1. [MySQL] Une requête qui ne marche pas sur tous les enregistrements
    Par Marc22 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/04/2010, 13h20
  2. [MySQL] 2 boucles sur une requête, pourquoi ça marche pas?
    Par MisterMacPhisto dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/04/2007, 12h32
  3. Réponses: 3
    Dernier message: 01/06/2006, 16h26
  4. [JDOM] Une méthode qui ne marche pas
    Par kaninama dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 24/05/2006, 16h10
  5. appel d'une methode qui ne marche pas
    Par hansaplast dans le forum C++
    Réponses: 4
    Dernier message: 27/04/2006, 13h52

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