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 :

code jsp associé à un form-property de type String[] (ou Collection)


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 104
    Par défaut code jsp associé à un form-property de type String[] (ou Collection)
    Bonjour.

    Lors du submit d'un formulaire, je souhaite récupérer une liste de String dont le nombre peut varier.

    j'ai vu qu'il était possible d'utiliser des propriété de formulaire de type String[] ou Collection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <form-bean name="RemplirQuestion" type="blabla.RemplirQuestion">
       <form-property name="reponses" type="java.lang.String[]" />
    </form-bean>
    côté jsp, j'arrive déjà à afficher cette liste à l'aide d'un <c:forEach très classique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <c:forEach var="beanReponse" items="${beanQuestion.reponses}">
     <tr>
       <td>${beanReponse.rang}</td>
       <td><input type="text" name="intituleReponse" value="${beanReponse.value}" /></td>
     </tr>
    </c:forEach>

    Mon problème:
    Comment faire en sorte que toutes les réponses soient englobées dans un même attribut de type String[] (ou Collection).

    Merci d'avance!

  2. #2
    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
    Tu peux ajouter l'attribut varStatus dans le tag c:forEach pour pouvoir utiliser l'index de l'objet courant dans le tag text :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <c:forEach var="beanReponse" items="${beanQuestion.reponses}" varStatus="status">
     <tr>
       <td>${beanReponse.rang}</td>
       <td><html:text property="reponses[${status.index}]" value="${beanReponse.value}"/></td>
     </tr>
    </c:forEach>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 104
    Par défaut
    Bonjour.

    ça me paraît pas mal ce que tu me présentes seulement je sais pas encore si ça marche car après avoir implémenté cette fonctionnalité j'ai des erreur que je n'arrive pas à localiser :'(


    Juste par curiosité, pour les Collection ça marcherait comment?

  4. #4
    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
    Avec une collection, le fonctionnement est identique.
    Il est d'ailleurs plus pratique d'utiliser une collection plutôt qu'un tableau de String parce que pour un tableau de String, on est obligé de fixer sa longueur, ce qui n'est pas le cas pour une collection.

    Si tu as des erreurs, poste-les.

    Sinon, tu as aussi une solution qui consiste à modifier directement la collection d'objets plutôt que de mettre les champs saisis dans une collection ou un tableau de String à part.

    Avec par exemple les tags nested, si beanQuestion est une propriété de l'ActionForm et si reponses est une collection, propriété de beanQuestion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <nested:form action="pathAction">
       <nested:nest property="beanQuestion">
          <nested:iterate property="reponses">
          <tr>
             <td><nested:write property="rang"/></td>
             <td><nested:text property="value"/></td>
          </tr>
          </nested:iterate>
       </nested:nest>
    </nested:form>

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 104
    Par défaut
    Quand tu dis que c'est identique, c'est qu'à la place d'avoir
    property="reponses[${status.index}]" on se retrouve avec
    property="reponses(${status.index})" ? Sinon je vois pas comment écrire ça



    Si je ne mets pas les erreurs ici c'est que je n'en ai aucune qui apparaît
    Je suis simplement redirigé vers ma page d'erreur générale après avoir enregistré les réponses.
    Avec du débugging j'ai pu cibler le problème:quand mon actionForm est initialisé, je ne sais pas pourquoi la méthode getReponses de mon actionForm est appelé je ne sais comment. étant donné qu'il n'a pas encore été initialisé, j'ai un NullPointerException. Je ne sais pas du tout pourquoi cette méthode est appelée

  6. #6
    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
    Citation Envoyé par HozakaN Voir le message
    Quand tu dis que c'est identique, c'est qu'à la place d'avoir
    property="reponses[${status.index}]" on se retrouve avec
    property="reponses(${status.index})" ? Sinon je vois pas comment écrire ça
    Il faut l'écrire de la même façon, soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    property="reponses[${status.index}]"

    Citation Envoyé par HozakaN Voir le message
    Si je ne mets pas les erreurs ici c'est que je n'en ai aucune qui apparaît
    Je suis simplement redirigé vers ma page d'erreur générale après avoir enregistré les réponses.
    Avec du débugging j'ai pu cibler le problème:quand mon actionForm est initialisé, je ne sais pas pourquoi la méthode getReponses de mon actionForm est appelé je ne sais comment. étant donné qu'il n'a pas encore été initialisé, j'ai un NullPointerException. Je ne sais pas du tout pourquoi cette méthode est appelée
    Utilises-tu toujours une ActionForm dynamique ?
    Avec une ActionForm normale, pour éviter le NullPointerException, il faut initialiser la propriété reponses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private String[] reponses=new String[0] ;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private List reponses=new ArrayList() ;

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/03/2014, 09h38
  2. Tuto MVVM : dans le source, une property de type string retourne un booléen ?!
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 23/03/2009, 08h35
  3. [VB.NET;C#) Associer du code C#.NET à un form VB.NET ?
    Par beegees dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2006, 10h06
  4. [STRUTS][JSP] html:file et property value
    Par Wavyx dans le forum Struts 1
    Réponses: 3
    Dernier message: 21/10/2005, 16h34
  5. [Debutant(e)]Générer du code JSP dynamiquement
    Par Gibier dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 16/01/2004, 11h54

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