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 :

[struts] problème d'implémentation d'une classe form


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    juin 2004
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 39
    Points : 30
    Points
    30
    Par défaut [struts] problème d'implémentation d'une classe form
    Bonjour,

    Voici mon petit problème journalier de débutant.

    Dans l'exemple, on se logue aprés avoir donné un login et un pass bidon, et on arrive sur la page des articles

    Le problème est qu'il manque une classe form.

    J'ai essayé de la faire tout seul et devinez quoi...Et bien débutant comme je suis j'y arrive pas.

    Le problème est que dans sa classe form il utilise un objet qu'il a créé, et je ne sais pas trop comment implémenter les méthodes set et get qui vont avec.

    J'ai donc l'erreur suivant: Cannot find bean ChooseForm in any scope

    Voici les sources:

    les java bean qui servent de source de données


    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
    42
    43
    44
    45
    46
    47
    48
    public class Article {          // Un bon vieux Java Bean bien classique
     
        private int m_IdArticle;
        private String m_Marque;
        private String m_Designation;
        private double m_Price;
     
        public int getIdArticle() { return this.m_IdArticle; }
        public void setIdArticle(int idArticle) throws Exception {
    	if (idArticle<0) throw new Exception("IdArticle must be positive");
    	this.m_IdArticle = idArticle;
        }
     
        public String getMarque() { return this.m_Marque; }
        public void setMarque(String marque) {
    	this.m_Marque = marque.toUpperCase();
        }
     
        public String getDesignation() { return this.m_Designation; }
        public void setDesignation(String designation) {
            this.m_Designation = designation.toLowerCase(); 
        }
     
        public double getPrice() { return this.m_Price; }
        public void setPrice(double price) throws Exception {
    	if (price<0) throw new Exception("Price must be positive");
    	this.m_Price = price;
        }
     
        public Article() throws Exception {
    	this(0, "Inconnue", "???", 1);
        }
     
        public Article(int id, String marque, String designation, double price)
    	    throws Exception {
    	this.setIdArticle(id);
    	this.setMarque(marque);
    	this.setDesignation(designation);
    	this.setPrice(price);
        }
     
        public String toString() {
           return this.m_IdArticle + ": article "
                + this.m_Designation + " de marque "
                + this.m_Marque + " et de prix "
                + this.m_Price + " Euros";
        }
    }
    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
    // Cette implémentation de catalogue d'articles est très simpliste,
    // je vous l'accorde. Mais le but consiste à vous montrer certains concepts
    // fondamentaux de Struts. Je ne préfère donc pas alourdir le reste du code !!!
     
    public class Catalog {
        public static Article [] m_Articles = new Article[4];
     
        static {
    	try {
    	    m_Articles[0] = new Article(0, "Byque", "Stylo bleu", 1);
    	    m_Articles[1] = new Article(1, "FoncéFontaine", "Ramette papier", 5);
    	    m_Articles[2] = new Article(2, "Harry beau", "bonbon", 0.2);
    	    m_Articles[3] = new Article(3, "Bidule", "Equerre", 3);
    	} catch(Exception e) {
                System.err.println("Ouille !");
            }
        }
     
    }
    ///////////////////// la class chooseAction /////////////////////

    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
    import javax.servlet.http.*;
    import org.apache.struts.action.*;
     
    public class ChooseAction extends Action {
     
        public ActionForward execute(
            ActionMapping mapping, ActionForm _form,
            HttpServletRequest request, HttpServletResponse response
        ) throws Exception {
            ChooseForm form = (ChooseForm) _form;
            form.setArticle( Catalog.m_Articles[form.getIdArticle()] );
            System.out.println( form.getArticle() );
            return mapping.findForward("Choose");
        }
     
    }
    ///////////////////// la class chooseform ///////////////////

    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
    public class ChooseForm extends ActionForm
    {
    private Article m_article;
    private int idarticle =1;
     
    public Article getArticle() throws IOException
    {
    return this.m_article;
    }
     
    public void setArticle(Article article) throws IOException
    {
    this.m_article = article;
    }
     
    public int getIdArticle() throws IOException
    {
    return this.idarticle;
    }
     
    public void setIdArticle(int IdArticle) throws IOException
    {
    this.idarticle=IdArticle;
    }
    }
    //////////////////////// la class loginaction //////////////////

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class LoginAction extends Action {
     
        public ActionForward perform(
    	ActionMapping mapping, ActionForm _form,
    	HttpServletRequest request, HttpServletResponse response
        ) throws Exception {
            // On traite la requête cliente
    	LoginForm form = (LoginForm) _form;
    	System.out.println("Struts in action "
    	     + form.getUsername() + " - " + form.getPassword());
            // On redirige vers la vue adaptée
    	return mapping.findForward("Choose");
        }
    }
    ///////////////// la class loginform /////////////////////

    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
    public class LoginForm extends ActionForm {
    	private String m_username = "root";
    	private String m_password = "azerty";
     
    	public String getUsername() {
    		System.out.println("On passe par UserBean.getUsername !");
    		return this.m_username;
    	}
    	public void setUsername(String username) {
    		System.out.println("On passe par UserBean.setUsername !");
    		this.m_username = username;
    	}
    	public String getPassword() {
    		System.out.println("On passe par UserBean.getPassword !");
    		return this.m_password;
    	}
    	public void setPassword(String password) {
    		System.out.println("On passe par UserBean.setPassword !");
    		this.m_password = password;
    	}
    }
    ///////////////// choose.jsp ////////////////////////////

    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
    <%@ page language="java" import="java.util.*"  %>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <html>
        <head>
    	<title>Veuillez Choisir vos articles</title>
        </head>
        <body>
     
            <h1 align="center">Veuillez Choisir vos articles</H1>
     
    	<div align="center">
    	    Id de l'article :
    		<bean:write name="ChooseForm" property="idArticle" /> <BR/>
    	    Marque :
    		<bean:write name="ChooseForm" property="article.marque" /> <BR/>
    	    Designation :
    		<bean:write name="ChooseForm" property="article.designation"/> <BR/>
    	    Prix unitaire :
    		<bean:write name="ChooseForm" property="article.price" /> <BR />
     
    	    <%
    	        int idArticle = Integer.parseInt(request.getParameter("idArticle"));
    	    %> <BR />
    	    <a href="choose.do?idArticle=<%= idArticle - 1 %>">Précédant</a> - 
    	    <a href="choose.do?idArticle=<%= idArticle + 1 %>">Suivant</a>
    	</div>
        </body>
    </html>
    /////////////////////// 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
    <?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="LoginForm" />
    		<form-bean name="ChooseForm" type="ChooseForm" />
    	</form-beans>
     
    	<global-forwards>
    		<forward name="Connected" path="/Connected.jsp" />
    		<forward name="Choose" path="/ChooseArticle.jsp" />
    	</global-forwards>
     
    	<action-mappings>
    		<action	path="/login"
    			name="LoginForm"
    			type="LoginAction"
    			scope="request" />
     
    		<action path="/choose"
    			name="ChooseForm"
    			type="ChooseAction"
    			scope="request" />
    	</action-mappings>
    </struts-config>

  2. #2
    Membre à l'essai
    Inscrit en
    juin 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    je pense qu'il faut que ta jsp contienne un formulaire si tu veux recuperer les donnees a partir d'un ActionForm de Struts.

    Dans le code de ta jsp tu lui dis d'aller chercher les donnes dans un bean ChooseForm mais tu lui indiques nulle part ou est ce bean...

  3. #3
    Nouveau membre du Club
    Inscrit en
    juin 2004
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    pourquoi définir un formulaire? Je ne veux rien saisir...quand je suis logué, j'ai le premier article présent dans mon tableau qui doit être présenté. Ensuite avec précédent et suivant je choisis l'article suivant ou précédent...je ne vois pas trés bien pourquoi créer un formulaire...

  4. #4
    Membre à l'essai
    Inscrit en
    juin 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    en fait, l'erreur que tu as :
    Cannot find bean ChooseForm in any scope
    te dis qu'il ne trouve pas de bean correspondant a ce que tu veux afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <bean:write name="ChooseForm" property="idArticle" />
    quand je te dis d'utiliser un formulaire, en effet ce n'est pas obligatoire du tout, par contre, il te faut remplir un objet de type ChooseForm avec les donnees que tu veux afficher, et ensuite passer ce bean a ta jsp, soit en session soit en request.

  5. #5
    Nouveau membre du Club
    Inscrit en
    juin 2004
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    et c'est pas ce que je fais dans le chooseaction avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form.setArticle( Catalog.m_Articles[form.getIdArticle()])
    : : : : [/code]

  6. #6
    Membre à l'essai
    Inscrit en
    juin 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    en fait je ne vois pas bien l'enchainement de ton application.

    Dans ce que j'avais vu, l'action LoginAction renvoie sur ta jsp Choose.jsp
    A ce moment la tu n'as pas encore fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form.setArticle( Catalog.m_Articles[form.getIdArticle()]
    ensuite, en effet il n'y a p e pas besoin de lui en dire plus, il doit pouvoir recuperer les donnees...

    Si tu appelles bien ton action avant la jsp, alors je ne sais pas....
    desole

  7. #7
    Nouveau membre du Club
    Inscrit en
    juin 2004
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    Alors je vais peut être dire quelque chose d'immonde pour les puristes de struts mais c'est pas grave je me lance

    en fait loginAction me renvoie ma jsp Choose.jsp mais sans passer par ChooseAction et par conséquent Choosefrom n'existe pas...est ce que c'est ça ou j'ai tout faux?

  8. #8
    Membre à l'essai
    Inscrit en
    juin 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    voila, en effet, c'est un peu l'idee

    en gros, il faudrait qu'une fois identifie,ton action loginAction t'envoies sur ta ChooseAction afin d'initialiser ton bean pour pouvoir recuperer les donnees apres dans ta jsp.

  9. #9
    Nouveau membre du Club
    Inscrit en
    juin 2004
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    et bien sûr tu ne saurais pas comment réaliser ce miracle?

  10. #10
    Nouveau membre du Club
    Inscrit en
    juin 2004
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    bon alors j'ai réglé le problème provisoirement en mettant une page intermédiaire de confirmation de connexion...
    a+

  11. #11
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : mars 2003
    Messages : 579
    Points : 1 386
    Points
    1 386
    Par défaut
    tu n'aurais pas besoin de faire tout ca si les noms de tes variables etaient standardisées ( norme JavaBeans), cad pas de truc du genre m_article mais article.

    D'ailleurs a quoi sert ce m_??? pour dire que c un membre? c tres bad practice ce genre de choses. des vieux trucs hérités de vieux codeurs C++....

    @+

  12. #12
    Membre à l'essai
    Inscrit en
    juin 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    tu dois pouvoir faire ca simplement dans ton struts-config :

    qq chose de ce style la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <action path="/login" name="LoginForm" type="LoginAction" scope="request">
          <forward name="choose" path="/choose.do"/> 
    </action>

  13. #13
    Nouveau membre du Club
    Inscrit en
    juin 2004
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    C'est bon ça marche merci

    a+

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/10/2006, 13h28
  2. problème d'accès dans une classe dérivée!
    Par chrono23 dans le forum C++
    Réponses: 47
    Dernier message: 10/10/2006, 12h22
  3. Réponses: 2
    Dernier message: 05/04/2006, 00h22
  4. Problème de construction d'une classe
    Par AraBorLeg dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2005, 20h07
  5. [C#] problème d'affichage d'une nouvelle Form
    Par michel_frederic dans le forum C#
    Réponses: 15
    Dernier message: 17/11/2005, 17h40

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