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] Problème avec Datagrid


Sujet :

Struts 1 Java

  1. #1
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut [Struts-Layout] Problème avec Datagrid
    J'essaye d'executer un exemple de Struts-Layout en utilisant un Datagrid. J'ai reçu un message alors que la configuration me semble correcte. J'ai cherché sur google mais j'ai pas vu de réponse.

    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
    java.lang.NullPointerException
    	fr.improve.struts.taglib.layout.collection.CollectionsIterator.<init>(CollectionsIterator.java:35)
    	fr.improve.struts.taglib.layout.collection.BaseCollectionTag.doStartLayoutTag(BaseCollectionTag.java:929)
    	fr.improve.struts.taglib.layout.datagrid.DatagridTag.doStartLayoutTag(DatagridTag.java:57)
    	fr.improve.struts.taglib.layout.BodyLayoutTagSupport.doStartTag(BodyLayoutTagSupport.java:36)
    	org.apache.jsp.pages.parc_jsp._jspx_meth_layout_005fdatagrid_005f0(parc_jsp.java:211)
    	org.apache.jsp.pages.parc_jsp._jspx_meth_layout_005frow_005f0(parc_jsp.java:176)
    	org.apache.jsp.pages.parc_jsp._jspx_meth_layout_005fform_005f0(parc_jsp.java:145)
    	org.apache.jsp.pages.parc_jsp._jspx_meth_layout_005fhtml_005f0(parc_jsp.java:111)
    	org.apache.jsp.pages.parc_jsp._jspService(parc_jsp.java:81)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

  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
    Jette un oeil à cette discussion.

  3. #3
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Ok c'est du repost, tu peux supprimer le thread

    Je m'excuse.

  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
    Ben non, ce n'est pas du multipost.
    L'autre discussion a été ouverte par khairy.
    Son problème ayant été résolu, il vaudrait mieux continuer dans cette discussion puisque c'est toi qui l'a ouverte.

  5. #5
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Je viens de résoudre mon problème grace à la méthode que tu as proposée dans le lien ci-dessus. Mais malheureusement le datagrid que j'ai est vide, alors que des données devraient normalement s'afficher.

  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
    Dans l'exemple que j'ai donné, on initialisait le datagrid avec une collection contenant un seul bean avec des données null.

    Si tu veux avoir des données dedans, il faut donc que tu constitues une collection de beans à partir de tes données et que tu initialises le datagrid avec cette collection.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par c_nvy
    Dans l'exemple que j'ai donné, on initialisait le datagrid avec une collection contenant un seul bean avec des données null.

    Si tu veux avoir des données dedans, il faut donc que tu constitues une collection de beans à partir de tes données et que tu initialises le datagrid avec cette collection.

  8. #8
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Citation Envoyé par c_nvy
    Si tu veux avoir des données dedans, il faut donc que tu constitues une collection de beans à partir de tes données et que tu initialises le datagrid avec cette collection.
    J'ai une action dans laquelle je crée une collection de beans.

    Action
    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 ActionForward display(
    			ActionMapping actionMapping,
    			ActionForm actionForm,
    			HttpServletRequest request,
    			HttpServletResponse response)
     
    	        throws Exception {
     
    		DataGridForm lc_form = (DataGridForm) actionForm;
     
    		// Get an object list.
    		VehiculeDAO vehicule = new HibernateDAOFactory().getVehiculeDAO();
    		List vehiculeList= vehicule.ListVehicule();
     
    		// Create a datagrid.
    		Datagrid lc_datagrid = Datagrid.getInstance();
     
    		// Set the bean class for new objects. We suppose SomeBean is the class of the object in the List aList.
    		lc_datagrid.setDataClass(Vehicule.class);
     
    		// Set the data
    		lc_datagrid.setData(vehiculeList);
     
    		// Initialize the form
    		lc_form.setDatagrid(lc_datagrid);
     
    		// Forward to the jsp.
    		return actionMapping.findForward("list");
    	}
    ActionForm
    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
    public class DataGridForm extends ActionForm {
    	private static final long serialVersionUID = 1L;
    	private Datagrid datagrid;
     
    	public void setDatagrid(Datagrid in_datagrid) {
    		datagrid = in_datagrid;
    	}
    	public Datagrid getDatagrid() {
    		return datagrid;
    	}
     
    	public DataGridForm() {
    	 	   ArrayList liste = new ArrayList() ;
    		   liste.add(new Vehicule()) ;
     
    		   datagrid = Datagrid.getInstance();
    		   datagrid.setDataClass(Vehicule.class);
    		   datagrid.setData(liste);
     
    	    }
    }
    Sinon est ce qu'il n'y a pas dans la méthode que tu proposes un risque d'aller à l'encontre des principes du modèle MVC, sans que l'accès aux données ne se fassent au niveau actionForm ?Quand je fais l'instanciation de mon bean de la manière suivante ça marche, mais ça ne devient plus du MVC

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           VehiculeDAO vehicule = new HibernateDAOFactory().getVehiculeDAO();
    		List vehiculeList= vehicule.ListVehicule();
     
    		   datagrid = Datagrid.getInstance();
    		   datagrid.setDataClass(Vehicule.class);
    		   datagrid.setData(vehiculeList);

  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
    Je n'ai jamais dit qu'il fallait mettre l'accès aux données dans l'ActionForm.
    Le cas de khairy était différent vu qu'il initialisait le datagrid avec une collection vide.

    Dans ton cas, j'ai dit qu'il fallait initialiser le datagrid avec une collection de beans constituée à partir de tes données.
    Je n'ai effectivement pas précisé qu'il fallait le faire dans l'Action.
    Ta méthode est donc la bonne.
    Tu fais l'initialisation du datagrid avec une collection de beans dans une méthode de la DispatchAction.

    La première fois que tu appelles l'Action, il faut donc lui passer en paramètre reqCode=display.
    Ainsi, ton datagrid sera initialisé avec les données.

  10. #10
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Je n'ai jamais dit qu'il fallait mettre l'accès aux données dans l'ActionForm.
    Le cas de khairy était différent vu qu'il initialisait le datagrid avec une collection vide.
    Je m'excuse je n'avais pas bien saisi.

    Tu fais l'initialisation du datagrid avec une collection de beans dans une méthode de la DispatchAction.

    La première fois que tu appelles l'Action, il faut donc lui passer en paramètre reqCode=display.
    Ainsi, ton datagrid sera initialisé avec les données.
    C'est ce que j'avais fait en premier, et c'est ça qui a été à l'origine de l'erreur précédente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <layout:form action="/InputSubmit" reqCode="display" styleClass="PANEL">

  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
    Mais où as-tu mis le code d'affichage du datagrid ?
    Dans la jsp qui est appelée après le submit de l'Action de path /InputSubmit ?

  12. #12
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Citation Envoyé par c_nvy
    Mais où as-tu mis le code d'affichage du datagrid ?
    Dans la jsp qui est appelée après le submit de l'Action de path /InputSubmit ?
    Tout se déroule dans le même jsp.
    En fait j'ai un jsp qui a datagrid qui est lui-même contenu dans un form dont l'action est un DispatchAction qui a entre autres comme méthodes :
    display pour le chargement du datagrid
    delete pour la suppression à partir du datagrid
    add pour l'ajout à partir du datagrid

    J'avais cru comprendre qu'au premier affichage d'un form, celui-ci devrait être initialisé par la classe correspondant à l'action. C'est pour ça que j'ai mis cette ligne de code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <layout:form action="/InputSubmit" reqCode="display" styleClass="PANEL">

  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
    Quand tu codes ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <layout:form action="/InputSubmit" reqCode="display" styleClass="PANEL">
    la méthode display de la DispatchAction n'est exécutée qu'au submit du formulaire alors qu'il faut l'exécuter avant l'affichage du formulaire.

    Comment fais-tu appel à cette jsp ?

  14. #14
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    C'est le premier jsp que je dois afficher, le jsp par défaut.

  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
    Dans ce cas, je vois qu'une solution pour exécuter l'Action avant l'affichage de la jsp.

    Tu crées une jsp que tu vas déclarer dans la balise welcome-file du web.xml et qui contient ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
     
    <logic:forward name="main"/>
    Dans le struts-config.xml, tu définis le forward main dans la balise global-forwards :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <global-forwards>
    	<forward name="main" path="/InputSubmit.do?reqCode=display"/>
    </global-forwards>
    Ainsi, la méthode display de l'Action de path /InputSubmit sera exécutée avant l'affichage de la jsp affichant le datagrid.

  16. #16
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Bravo encore une fois !

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

Discussions similaires

  1. [Struts-Layout] problème avec dynMenu
    Par vny dans le forum Struts 1
    Réponses: 3
    Dernier message: 26/11/2008, 14h01
  2. [Struts-layout] Problème avec le dynMenu
    Par delph1983 dans le forum Struts 1
    Réponses: 21
    Dernier message: 28/05/2008, 13h07
  3. [Struts-Layout] problème avec layout:collection
    Par khayri dans le forum Struts 1
    Réponses: 4
    Dernier message: 31/05/2007, 13h28
  4. [Struts-Layout] Problème avec Swap
    Par midoENSI dans le forum Struts 1
    Réponses: 2
    Dernier message: 20/05/2007, 21h26
  5. [Struts-Layout] problème avec layout:datagrid
    Par khayri dans le forum Struts 1
    Réponses: 2
    Dernier message: 20/04/2007, 09h31

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