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 :

Session Formulaire et Collection


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 105
    Points
    105
    Par défaut Session Formulaire et Collection
    Bonjour,

    je me lance dans strust et les premiers problèmes surgissent, voici le problème:

    Dans la sessions je mets un objet définit de cette façon ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     private Collection books;
    books = new ArrayList();
    books.add(new Book(random.nextLong(), "David Roos", "Struts book", true));
    session.setAttribute("bookListForm", books);
    Bien, j'ai l'objet books dans la session, dans la jsp ou je prétends lire ma liste de livre j'ai quelque chose dans ce genre:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		<logic:empty name="bookListForm" property="books">
    			<tr>
    				<td colspan="5">No books available</td>
    			</tr>
    		</logic:empty>
    j' obtiens l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SEVERE: Servlet.service() for servlet jsp threw exception
    javax.servlet.jsp.JspException: No getter method for property books of bean bookListForm
    pourtant j'ai bien la définition de mon formulaire présent dans le fichier struts-config.xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       <form-beans >
       	<form-bean name="bookListForm" type="de.laliluna.tutorial.library.struts.form.BookListForm">
    	</form-bean>
    et aussi une méthode get dans la classe:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private Collection books;
     
        public Collection getBooks() {
                return books;
        }
     
        public void setBooks(Collection books) {
                this.books = books;
        }
     
        public void reset(ActionMapping arg0, HttpServletRequest arg1) {
                books = new ArrayList();
        }

    Merci d'avance.

  2. #2
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    En codant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    books = new ArrayList();
    books.add(new Book(random.nextLong(), "David Roos", "Struts book", true));
    session.setAttribute("bookListForm", books);
    tu mets la collection books dans le scope session sous le nom bookListForm.

    Le test dans la jsp devrait donc être le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <logic:empty name="bookListForm">
    Pour ne pas qu'il y ait de conflit avec le form-bean, je te conseille de mettre la collection books dans le scope session sous le nom books :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.setAttribute("books", books);
    et coder ceci dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <logic:empty name="books">

    Si par contre tu veux initialiser la propriété books de l'ActionForm BookListForm, il faut référencer le form-bean bookListForm dans le mapping de l'Action dans le struts-config.xml et coder ceci dans l'Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BookListForm bookListForm=(BookListForm) form ;
    books = new ArrayList();
    books.add(new Book(random.nextLong(), "David Roos", "Struts book", true));
    bookListForm.setBooks(books) ;
    et là tu pourras coder ceci dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <logic:empty name="bookListForm" property="books">
    Modératrice Java - Struts, Servlets/JSP, ...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 105
    Points
    105
    Par défaut Session Formulaire et Collection
    Bonjour,


    Alors, je serait intéressé de savoir comment faire pour pouvoir coder

    <logic:empty name="bookListForm" property="books"> et référencer le form-bean bookListForm dans le mapping?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       <action-mappings >
     
       	<action path="/default" unknown="true" forward="/jsp/index.jsp"></action>
     
       	<action path="/bookList"
       			type="de.laliluna.tutorial.library.struts.action.BookListAction"
       			validate="true" 
       			input="/jsp/BookList.jsp" 
       			scope="request">
       		<forward name="showList" path="/jsp/bookList.jsp"></forward>
    	</action>
       	</action-mappings>

    Je te remercie!

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 105
    Points
    105
    Par défaut Session Formulaire et Collection
    Je te remercie pour les réponses


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       	<action path="/bookList"
       			type="de.laliluna.tutorial.library.struts.action.BookListAction"
       			validate="true" 
       			input="/jsp/BookList.jsp" 
       			scope="request"
       			name="bookListForm">
       		<forward name="showList" path="/jsp/bookList.jsp"></forward>
    	</action>

    a+

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 105
    Points
    105
    Par défaut Session Formulaire et Collection
    Ça marche presque, j'ai bien le form-bean dans la session, mas je le détecte toujours vide dans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    <logic:empty name="bookListForm" property="books">
    <tr>
    	<td colspan="5">No books available</td>
    </tr>
    </logic:empty>
    alors qu'il devrait faire

    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
     
    <logic:notEmpty name="bookListForm" property="books">
    <logic:iterate name="bookListForm" property="books" id="book">
    	<tr>
    	<%-- print out the book informations --%>
    	<td><bean:write name="book" property="author" /></td>
    	<td><bean:write name="book" property="title" /></td>
    	<td><html:checkbox disabled="true" name="book"
    						property="available" /></td>
    	<%-- print out the edit and delete link for each book --%>
    	<td><html:link action="bookEdit.do?do=editBook"
    			paramName="book" paramProperty="id" paramId="id">Edit</html:link></td>
    	<td><html:link action="bookEdit.do?do=deleteBook"
    		paramName="book" paramProperty="id" paramId="id">Delete</html:link></td>
    </tr>
    </logic:iterate>
    		</logic:notEmpty>

  6. #6
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Appelles-tu bien l'Action de path /bookList pour afficher la page ?
    Si c'est bien le cas, il faudrait mettre validate à false dans le mapping de l'Action parce que la première fois que tu affiches la page, rien n'ayant été saisi dans le formulaire, et si tu as implémenté la méthode validate, tu vas avoir des erreurs de validation.
    Modératrice Java - Struts, Servlets/JSP, ...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 105
    Points
    105
    Par défaut Session Formulaire et Collection
    j'avais cette déclaration:

    BookListForm bookListForm = new BookListForm();


    au lieu de:
    BookListForm bookListForm = (BookListForm) form;

    mais alors si c'est la première et comme rien n' a été saisi, alors j'aurais une erreur.

    mais pour le reste ça marche....

    Merci!

  8. #8
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    A partir du moment où tu lies le form-bean à l'Action dans le mapping, au premier appel de l'Action, Struts instancie l'ActionForm avant d'exécuter le code présent dans la méthode execute.

    Donc le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BookListForm bookListForm = (BookListForm) form;
    fonctionnera très bien.
    Modératrice Java - Struts, Servlets/JSP, ...

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/03/2013, 22h34
  2. [2.x] Formulaire de collection entités
    Par albacore dans le forum Symfony
    Réponses: 1
    Dernier message: 09/09/2011, 10h50
  3. [AC-2007] envoi de formulaire pour collecte de données
    Par Alain7751 dans le forum IHM
    Réponses: 1
    Dernier message: 31/07/2009, 14h49
  4. [Spring MVC] Problème formulaire avec Collection
    Par arN34 dans le forum Spring Web
    Réponses: 1
    Dernier message: 16/09/2006, 13h17

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