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 :

PB ActionForm de type list


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 37
    Par défaut PB ActionForm de type list
    Bonjour.

    Je débute en Struts et rame dès qu'il s'agit de faire des choses un peut spécifiques.

    Avec Struts, est-il possible d’alimenter par défaut un ActionForm qui ne possède qu’une seule propriété qui est une Liste d’objets précis (dont la taille peut variée d’un appel à l’autre). Puis d’afficher dans la JSP cette liste en permettant la modification de certaines propriétés des objets de la liste.
    Jusque là j’y arrive (au moyen du taglib « <logic:iterate … »), mais mon problème est pour récupérer le liste avec les valeurs modifiées.

    Faut-il utiliser les taglig « nested » ?
    Avez-vous un exemple ?

    Si je ne suis pas assez clair voici une description plus poussée :

    Mon application Web (J2EE, Struts) doit permettre la saisie de dossiers pour insertion dans une BDD.

    Un dossier est constitué d'une entête (infos générales) et éventuellement de 0 à n lignes de détails (Bref il s'agit d'une relation Maitre-détail sans forcément de détail).

    J'ai donc fait une première JSP pour la saisie des informations générales, mais où on précise aussi le nombre de lignes détail "N" qu'on veut associer à ce dossier (valeur pré-renseignée à 0 par défaut).

    Si le nombre "N" saisie est resté à 0 alors l'action insère le dossier (sans ligne détail) dans la base et chaine sur une JSP indiquant que le dossier a bien été créé.

    Si le nombre "N" saisi est > 0 alors l'action renvoie vers une autre JSP pour saisir ces N lignes de détail.


    Comment implémenter ça techniquement sous Struts ? Est-ce possible ?

    Voici comment j'essaie de procéder:

    JSP1 : Saisie des infos générales du dossier : nom, type dossier, …, nombre de lignes détail (entre 0 et N)
    Action1 : récupère les informations saisies et connait alors le nombre de ligne détail à faire saisir sur la prochaine JSP
    ActionForm1 : Structure d’une entête de dossier

    JSP2 : Saisie des N lignes détails
    Action2 : Récupère ces N lignes détail saisies
    ActionForm2 : Sa structure est une liste d’objet « ligne détail »


    La première Classe d'Action (« Action1 » qui réceptionne le Bean de Formulaire « ActionForm1 » permettant de saisir les infos générales du dossier) permet de connaitre le nombre de lignes détails à créer.

    Le Bean de Formulaire (ActionForm2) qui correspond à la seconde JSP (saisie des lignes détails) ne contient qu'une seule propriété, à savoir un tableau de ligne détail: "Private lgnDetail[] listeLgn;" avec ses accesseurs get et set.

    Dès la première Classe d'Action (« Action1 » qui réceptionne le Bean de Formulaire permettant de saisir les infos générales du dossier), je comptais donc créer l'ActionForm2 de la JSP2 sur laquelle on doit chainer, puisque je connais le nombre de lignes détails à créer. Je crée donc le second « ActionForm2 » qui n'est rien d'autre qu'une liste de N lignes détails que je veux faire renseigner dans la JSP.

    Je peux mettre les codes sources si nécessaire.

    Merci

  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
    Citation Envoyé par jc44
    Bonjour.

    Je débute en Struts et rame dès qu'il s'agit de faire des choses un peut spécifiques.

    Avec Struts, est-il possible d’alimenter par défaut un ActionForm qui ne possède qu’une seule propriété qui est une Liste d’objets précis (dont la taille peut variée d’un appel à l’autre). Puis d’afficher dans la JSP cette liste en permettant la modification de certaines propriétés des objets de la liste.
    Jusque là j’y arrive (au moyen du taglib « <logic:iterate … »), mais mon problème est pour récupérer le liste avec les valeurs modifiées.

    Faut-il utiliser les taglig « nested » ?
    Avez-vous un exemple ?
    J'avoue avoir lu rapidement le reste de la discussion mais pour récupérer la liste avec les valeurs modifiées, il faut utiliser les tags nested.

    Leur utilisation est simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <nested:iterate name="nomDeTonFormBean" property="taCollection">
       <nested:text property="propriete1"/>
       <nested:text property="propriete2"/>
    </nested:iterate>

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 37
    Par défaut
    Merci c_nvy.
    J'ai donc essayer d'utiliser les tags nested, la JSP affiche bien les différents éléments de ma liste (propriété du FormBean), mais ça plante au post de ma JSP.
    Le message est le suivant:

    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
    javax.servlet.ServletException: BeanUtils.populate
    	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)
    	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
     
     
    cause mère 
     
    java.lang.NullPointerException
    	org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:427)
    	org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:340)
    	org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:684)
    	org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
    	org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:884)
    	org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)
    	org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)
    	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:493)
    	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


    J'ai mis un point d'arrêt juste au début de l'Action correspondante et ça n'arrive même pas là.

    Voici mon code:

    FormBean2:
    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
    public class CreerCrcForm extends ActionForm {
     
    	private List<Crc> listeCrc = new ArrayList<Crc>(); 
     
     
    	public CreerCrcForm() {
    	}
    	@Override
    	public ActionErrors validate (ActionMapping mapping, HttpServletRequest request) {
     
    		ActionErrors erreurs = new ActionErrors();
    		return erreurs;
     
    	}
     
    	@Override
    	public void reset (ActionMapping mapping, HttpServletRequest request) {
     
     
    	}
     
    	public List<Crc> getListeCrc() {
    		return listeCrc;
    	}
     
    	public void setListeCrc(List<Crc> listeCrc) {
    		this.listeCrc = listeCrc;
    	}	
     
    }
    Action1 (qui renvoie sur la JSP2 en question):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    			List<Crc> lt = new ArrayList<Crc>(); 
    			CreerCrcForm list = new CreerCrcForm(); 
    			for(int i = 0; i < cdf.getNbcrc(); i++) {
    				Crc crc = new Crc(d.getId(), i, d.getSociete(), "", "", "", login, ceJour, cetteHeure);
    				lt.add(crc);
     
    			}
    			list.setListeCrc(lt);
    			request.getSession().setAttribute("ListeCrc", list);
    		}
    Et enfin le code de la JSP2:

    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
     
    <html:form action="/creerCrc">
     
    <nested:iterate name="ListeCrc" property="listeCrc">
    <br>
       <nested:text property="crc"/>
       <nested:text property="cutil"/>
    </nested:iterate>
     
    <tr><td></td><td>
    	<html:submit>
    		<bean:message key="btn_soumettre"/> 
    	</html:submit>
    </td></tr>
    </html:form>
    Merci de votre aide.

  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
    C'est un problème de scope. Il faut mettre le form-bean en scope session dans le mapping de ton Action.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 37
    Par défaut
    J'ai donc été dans struts-config.xml pour ajouter scope="session" et attibute="NomDuFormBeanStockéEnSession".

    Et ça marche !

    Grand merci à toi "c_nvy".

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/05/2006, 15h12
  2. Heriter le type list de la STL
    Par mathher dans le forum SL & STL
    Réponses: 13
    Dernier message: 28/03/2006, 23h48
  3. array de type "liste"
    Par antrax2013 dans le forum ASP
    Réponses: 6
    Dernier message: 15/02/2006, 02h18
  4. Réponses: 7
    Dernier message: 14/02/2005, 10h40
  5. Pb avec le formulaire en type List
    Par LoulouFifi dans le forum Struts 1
    Réponses: 5
    Dernier message: 04/02/2004, 11h34

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