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 :

Bean non reconnu


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 10
    Par défaut Bean non reconnu
    Bonjour à tous,

    Adepte de la programmation Java mais encore novice dans Struts, j'ai besoin de votre aide.
    Je dois réaliser un petit carnet d'adresse, permettant le listage, l'ajout, la suppression et la modification de contacts.

    Mon problème se situe dans le listage des contact ! Je mets ci dessous le code des quatres fichiers concernés, struts-config.xml ; mon ActionForm (ContactListForm), l'action qui me redirige vers ma page JSP (ToIndexAction) et ma page JSP ou je désire effectuer mon listage (index.jsp).

    ContactListForm
    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
    public class ContactListForm extends ActionForm {	
     
    	private Collection contacts;
     
    	public ContactListForm(){
    	}
     
    	public Collection getContacts(){
    		return contacts;
    	}
     
    	public void setContacts(Collection c){
    		contacts = c;
    	}
     
    }
    -------------------------------------
    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
    <struts-config>
    	<form-beans>
    		<form-bean name="contactForm" type="forms.ContactForm" />
    		<form-bean name="contactListForm" type="forms.ContactListForm"/>
    	</form-beans>
     
    	.....
    	<action-mappings>
    	....
     
    		<action path="/toIndex" scope="request" validate="false" attribute="contactListForm" input="/pages/index.jsp"
    				type="actions.ToIndexAction" >
     
    				<forward name="success" path="/pages/index.jsp"></forward>
    		</action>
             ....
    	</action-mappings>
    </struts-config>
    ------------------------
    ToIndexAction.java

    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 ToIndexAction extends Action {
     
    	Statement stmt;
     
    	public ActionForward execute(	ActionMapping mapping, ActionForm form, 
    			HttpServletRequest request, HttpServletResponse response) 
    				throws Exception {
    		ConnexionDB conn = new ConnexionDB();
    		ContactDB contact = new ContactDB(conn.getConnection());
     
    		ContactListForm liste = new ContactListForm();
     
    		ArrayList tmp = contact.listAgenda();
    		liste.setContacts(tmp);
     
    		return mapping.findForward("success");
    }
    }
    ---------------------------

    et index.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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
    <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
     
    <html>
    <body>
    	<h1>Mon agenda</h1>
    	<table>
    		<tr>
    			<td>id</td>
    			<td>Nom</td>
    			<td>Prénom</td>
    			<td>Adresse</td>
    			<td>Téléphone</td>
    			<td>Mail</td>
    			<td></td>
    		</tr>
     
    		<logic:empty name="contactListForm" property="contacts">
    			 <tr>
    			 <td colspan="6">No contacts !!</td>
    			 </tr>
    		</logic:empty>
     
    		<logic:notEmpty name="contactListForm" property="contacts">
    			<logic:iterate name="contactListForm" property="contacts" id="contact">
    				<tr>
    					<td><bean:write name="contact" property="id"/></td>
    					<td><bean:write name="contact" property="name"/></td>
    					<td><bean:write name="contact" property="firstanme"/></td>
    					<td><bean:write name="contact" property="address"/></td>
    					<td><bean:write name="contact" property="tel"/></td>
    					<td><bean:write name="contact" property="mail"/></td>
    				</tr>			
    			</logic:iterate>					
    		</logic:notEmpty>
     
    	</table>
    	<a href="/ContactBook/addContactForm.do">Add</a>
    </body>
    </html>

    Lors de l'éxécution de la page http://localhost:8080/ContactBook/toIndex.do j'obtiens l'erreur suivante :

    Cannot find bean: "contactListForm" in any scope

    Je pense que l'erreur se situe dans le struts-config.xml mais à vrai je ne sais plus trop tellement j'ai essayé de truc....

    J'espère que quelqu'un pourra m'aider,

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Par défaut
    Salut Bryce,


    Il me semble que le problème vienned'ici:

    <action path="/toIndex" scope="request" validate="false" attribute="contactListForm" input="/pages/index.jsp" type="actions.ToIndexAction" >


    Voici un ex provenant d'ici:
    http://brabant.developpez.com/tutori...?page=partie-3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <action input="/loginForm.jsp" 
              name="NewStrutsActionForm" 
              path="/login" 
             scope="request" 
         attribute="validlogin" 
              type="com.myapp.struts.NewStrutsAction">
      <forward name="success" 
                  path="/loginSuccessful.jsp"/>
      <forward name="cancel" 
                  path="/loginCancel.jsp"/>
      <exception key="message.java.lang.RuntimeException" 
                path="/loginExceptions.jsp" 
                type="java.lang.RuntimeException"/>
    Et ensuite dans ta jsp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h1>Welcome, <bean:write name="validlogin" property="name"/>!</h1>
    C'est avec "name" que tu précises ta form et attribute sert juste à lui filer un nom pour la manipulation dans la jsp par la suite (je ne suis pas sûr qu'il soit obligatoire d'ailleurs).

    En espérant que cela puisse t'aider...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 10
    Par défaut
    Je te remercie beaucoup vince, mon bean est maintenant reconnu dans ma page JSP.

    Par contre le <logic:empty> est exécuté ce qui veut donc dire que l'objet que je rempli dans mon ToIndexAction.java est vide...

    Hors lorsque j'affiche dans cette meme classe java le contenu de mon ArrayListe à l'aide de System.out.println(''), la collection est belle et bien remplie correctement.

    Dois je rajouter ou modifier quelque chose soit dans ma page JSP soit dans mon Action afin de pouvoir récupérer le contenu de la collection dans ma vue ?

    Merci encore !

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Par défaut
    En fait dans ton code java, il ne faut pas que tu instancies ta classe ContactListForm puisque c'est celle que tu reçois en paramètres dans ton ActionForward execute.

    Essaye un truc du genre (j'enlève les connexion à la base):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class ToIndexAction extends Action {  
    Statement stmt; public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {  
     
    final List tmp = new ArrayList()
    tmp.add("pim");
    tmp.add("pam");
    tmp.add("poum");
     form.setContacts(tmp);
     return mapping.findForward("success"); } }

  5. #5
    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
    C'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ContactListForm contactListForm = (ContactListForm) form ;
    contactListForm.setContacts(tmp);

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Par défaut
    Au temps pour moi. Il faut faire un ch'ti cast effectivement

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 10
    Par défaut
    Oui merci a tous les deux, j'avais bien compris qu'il fallait caster, mais c'est vrai que ré instancier le ContactListForm c'était pas malin ...

    En tout cas ça a résolu ce problème !

    Je ne voudrais pas abuser de votre sympathie, mais savez vous ce que signifie l'exception suivante ?

    JasperException: Cannot find message resources under key org.apache.struts.action.MESSAGE
    Encore merci !

    Edit : A priori cela vient de mes <bean:write> qui chercherait a afficher du contenu mais qui serait vide . je continu mes recherches...

  8. #8
    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
    Dans le struts-config.xml, as-tu défini une balise du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        <message-resources parameter="ressources"/>
    Et as-tu créé un fichier properties des messages dans ton projet ?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 10
    Par défaut
    Ah non pas du tout !
    A quoi cela sert-il ?

    Edit : cf mon premier post, dans ma page JS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <logic:notEmpty name="recupcontact" property="contacts">
    	<logic:iterate name="recupcontact" property="contacts" id="contact">
    		<tr>
    			<td><bean:write name="contact" property="id"/></td>
    			<td><bean:write name="contact" property="name"/></td>
    			<td><bean:write name="contact" property="firstanme"/></td>
    			<td><bean:write name="contact" property="address"/></td>
    			<td><bean:write name="contact" property="tel"/></td>
    			<td><bean:write name="contact" property="mail"/></td>
    		</tr>			
    	</logic:iterate>					
    </logic:notEmpty>
    Dans les balises <bean:write> que doit on mettre dans le champs name pour que la collection soit bien lu, peut être que je me trompe. Pour c'est l'id indiqué dans le <logic:iterate>


    Précision : lorsque ma base est vide, no contact est bien affiché, cela veut bien dire que ma collection est bien remplie .

  10. #10
    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 tu as codé ceci dans ton Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ContactListForm contactListForm = (ContactListForm) form ;
    contactListForm.setContacts(tmp);
    Dans la jsp, tu devrais avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <logic:notEmpty name="contactListForm" property="contacts">
    	<logic:iterate name="contactListForm" property="contacts" id="contact">
    		<tr>
    			<td><bean:write name="contact" property="id"/></td>
    			<td><bean:write name="contact" property="name"/></td>
    			<td><bean:write name="contact" property="firstanme"/></td>
    			<td><bean:write name="contact" property="address"/></td>
    			<td><bean:write name="contact" property="tel"/></td>
    			<td><bean:write name="contact" property="mail"/></td>
    		</tr>			
    	</logic:iterate>					
    </logic:notEmpty>
    Attention, tu as codé firstanme au lieu de firstname dans le bean:write.

Discussions similaires

  1. [Framework] Bean autowired non reconnu
    Par yo_haha dans le forum Spring
    Réponses: 3
    Dernier message: 15/11/2012, 18h24
  2. Réponses: 11
    Dernier message: 29/07/2009, 10h31
  3. Réponses: 0
    Dernier message: 22/07/2009, 16h31
  4. Réponses: 1
    Dernier message: 08/07/2009, 11h38
  5. xslt_create() non reconnu
    Par BRAUKRIS dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 11/12/2003, 14h43

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