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 :

[Struts-Layout] datagrid + save


Sujet :

Struts 1 Java

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Points : 138
    Points
    138
    Par défaut [Struts-Layout] datagrid + save
    Bonjour,

    J'ai réalisé un datagrid d'un pour une autre table de ma base, avec un bean tres simple ( juste des String ), toutes les fonctionnalités du datagrid fonctionne , add save remove.

    Maintenant je souhaite réaliser un datagrid d'ObligationInitiale contenant une Periodicité un peu plus compliqué, le datagrid s'affiche, mais je bloque sur le save.

    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
    <layout:datagrid property="datagrid" model="datagrid" styleClass="DATAGRID" >
     
    <layout:datagridColumn title="Titre" property="titre"/>
     
    <layout:datagridSelect title="Périodicite" property="periodicite.id">
    	<layout:options collection="periodicites" property="id" labelProperty="libelle"/>
    </layout:datagridSelect>
     
    </layout:datagrid>
     
    <layout:row>
    	<layout:button onclick="StrutsLayout.addDatagridLine('datagrid')">Ajouter</layout:button>
    	<layout:button onclick="StrutsLayout.setDatagridLineState('datagrid', 'removed')">Supprimer</layout:button>
    	<layout:submit reqCode="update" >Sauvegarder</layout:submit>
    </layout:row>
    le bean ObligationInitiale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class ObligationInitiale implements Serializable
    {
     
    	private String titre;
    	private Periodicite periodicite;
    qui a une periodicité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Periodicite implements Serializable
    {
    	private String id;
    	private String libelle;
    dans mon form, je prepare le terrain :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public ConsulterObligationInitialeForm()
    	{	
    		periodicites = new ArrayList<String>();
    		ArrayList<ObligationInitiale> liste = new ArrayList<ObligationInitiale>() ;
     
    		datagrid = Datagrid.getInstance();
    		datagrid.setDataClass(ObligationInitiale.class);
    		datagrid.setData(liste);
    	}
    j'initialise mon datagrid :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    consulterObligationInitialeForm.setDatagrid(datagrid);
     
    ArrayList periodicites = PeriodiciteFactory.getAll();
    request.getSession(false).setAttribute("periodicites", periodicites);
    mon config :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form-bean name="consulterobligationinitialeForm" type="form.ConsulterObligationInitialeForm">
    	<form-property name="reqCode" type="java.lang.String"/>
    	<form-property name="id" type="java.lang.String"/>
    </form-bean>
    si j'enleve le datagridSelect , je rentre dans ma methode update mais avec :

    dans ma console d'eclipse :
    11:16:00,734 ERROR [[action]] Servlet.service() for servlet action threw exception
    java.lang.IllegalArgumentException: No bean specified
    at org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptor(PropertyUtilsBean.java:751)
    sur le navigateur :

    javax.servlet.ServletException: BeanUtils.populate
    merci de votre aide

  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
    As-tu initialisé periodicite dans le constructeur de la classe ObligationInitiale comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.periodicite=new Periodicite() ;

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Points : 138
    Points
    138
    Par défaut
    merci de ton aide

    oui j'ai rajouté ta ligne

    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 ObligationInitiale()
    	{
    		this.periodicite=new Periodicite() ;
    	}
     
    public ObligationInitiale(	String id,
    			String titre,
    			Periodicite periodicite)
    	{
    		this.periodicite=new Periodicite() ;
    		this.id = id;
    		this.titre = titre;
    		this.periodicite = periodicite;
    	}
    toujours pareil

  4. #4
    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
    Le new Periodicite() ne sert à rien dans le deuxième constructeur étant donné que tu initialises periodicite avec l'objet Periodicite passé en paramètre du constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	this.periodicite = periodicite;
    Je suppose que tu fais appel à ce constructeur pour constituer l'ArrayList periodicites dans la méthode getAll() de PeriodiciteFactory ?

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Points : 138
    Points
    138
    Par défaut
    exactement

  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
    Cela fonctionne-t'il mieux si tu ajoutes une ligne à vide dans la liste dans le constructeur de ConsulterObligationInitialeForm comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public ConsulterObligationInitialeForm()
    {	
    	periodicites = new ArrayList<String>();
     
    	ArrayList<ObligationInitiale> liste = new ArrayList<ObligationInitiale>() ;
    	liste.add(new ObligationInitiale()) ;
     
    	datagrid = Datagrid.getInstance();
    	datagrid.setDataClass(ObligationInitiale.class);
    	datagrid.setData(liste);
    }

  7. #7
    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 fait, en y réfléchissant bien, ça ne changera rien car d'après ce que j'ai compris, l'affichage se fait bien mais pas la mise à jour.

    En principe, le problème que tu rencontres devrait être résolu en modifiant le constructeur sans paramètre comme je te l'ai indiqué.

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Points : 138
    Points
    138
    Par défaut
    pas mieux

  9. #9
    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
    Dans cette discussion, la modif du constructeur avait suffi.

  10. #10
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Points : 138
    Points
    138
    Par défaut
    j'avais vu ce topic, mais lui n'arrivait pas à afficher le datagrid

  11. #11
    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
    Non, le problème était bien à la soumission.

  12. #12
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Points : 138
    Points
    138
    Par défaut
    ce ne serait pas à cause qu'aucune taille n'est specifié nul part ?

    car ce serait ce qu'indique populate

    mais je vois pas comment indiqué une taille sur une ArrayList

  13. #13
    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
    C'est une idée.

    Via le constructeur, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<ObligationInitiale> liste = new ArrayList<ObligationInitiale>(10) ;

  14. #14
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Points : 138
    Points
    138
    Par défaut
    non

    en enlevant le datagrid select, tout fonctionne

    c'est frustrant

  15. #15
    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
    C'est sûr que c'est frustrant mais on a la preuve que ça devrait fonctionner avec un objet complexe.
    D'ailleurs, il me semble avoir fait le test chez moi.
    Il faudra que je regarde de plus près ce soir.

    Au fait, quelle version de Struts et Struts-Layout utilises-tu ?

  16. #16
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Points : 138
    Points
    138
    Par défaut
    1.2

  17. #17
    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
    Cela change-t'il quelque chose si tu initialises periodicite ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class ObligationInitiale implements Serializable
    {
     
    	private String titre;
    	private Periodicite periodicite=new Periodicite();

  18. #18
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Points : 138
    Points
    138
    Par défaut
    j'ai changé mon code dans ma jsp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <layout:datagridSelect title="Périodicite" property="id">
     
    <layout:option value="1" key="Journaliere"/>
    <layout:option value="2" key="Hebdomadaire"/>
    <layout:option value="3" key="Mensuelle"/>
    <layout:option value="4" key="Trimestrielle"/>
    <layout:option value="5" key="Semetrielle"/>
    <layout:option value="6" key="Annuelle"/>
    <layout:option value="7" key="Ponctuelle"/>
     
    </layout:datagridSelect>
    il atteint mon update de mon Action
    mais l'objet periodicité de mon ObligationInitiale a des valeurs par defaut

    ce qui veut dire qu'il utilise le constructeur par defaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Periodicite()
    {
    		id = "";
    		libelle = "";
    }

  19. #19
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Points : 138
    Points
    138
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Cela change-t'il quelque chose si tu initialises periodicite ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class ObligationInitiale implements Serializable
    {
     
    	private String titre;
    	private Periodicite periodicite=new Periodicite();

    toujours pareil

  20. #20
    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 tout cas, il faut chercher de ce côté car le message suivant :
    java.lang.IllegalArgumentException: No bean specified
    est dû à un objet null qui ne devrait pas l'être.

    Voir le code de la méthode getPropertyDescriptor :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public PropertyDescriptor getPropertyDescriptor(Object bean, String name)
            throws IllegalAccessException, InvocationTargetException, NoSuchMethodException
    {
            if(bean == null)
                throw new IllegalArgumentException("No bean specified");
    et je suis persuadée que l'objet en cause dans ton cas est celui de type Periodicite.

Discussions similaires

  1. [Struts-Layout] Datagrid et dispatch action
    Par sousoujda2 dans le forum Struts 1
    Réponses: 5
    Dernier message: 15/04/2008, 12h13
  2. Réponses: 2
    Dernier message: 31/01/2008, 14h45
  3. [Struts-Layout] Datagrid : Erreur Unchecked Conversion
    Par Le Pharaon dans le forum Struts 1
    Réponses: 13
    Dernier message: 21/09/2007, 09h02
  4. cacher des colonnes du struts layout datagrid
    Par imsory dans le forum Struts 1
    Réponses: 1
    Dernier message: 02/04/2007, 11h28
  5. Réponses: 2
    Dernier message: 25/02/2007, 23h56

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