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] jsp ne se rafraichit pas


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Points : 33
    Points
    33
    Par défaut [Struts-Layout][datagrid] jsp ne se rafraichit pas
    Bonsoir,

    j'ai une jsp avec un datagrid + bouton supprimer et submit validation

    lorsque je supprime une ligne , je selection une ligne, je clique sur le supprimer et je clique sur validation.

    cela m'envoye vers mon Action qui a 2 methodes valider(), permet de supprimer une ligne selctionnée et supprimer dans la base de donnée, puis je fais un forward vers la methode display() qui affiche le nouveau datagrid ainsi modifié. Or dans ma jsp, cela n'a pas changé après avoir cliquer sur le bouton validation, la ligne selectionné est barré. Il faut que je clique une 2eme fois pour voir le datagrid changé avec la ligne selectionnée supprimée.

    Comment faire pour que ma jsp se rafraichisse après le 1er clique sur validation, et voir que mon datagrid a changé ?

  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
    Normalement, tu ne devrais pas avoir besoin de faire un forward vers la méthode display() dans la méthode valider().

    Dans la méthode valider(), après avoir supprimé la ligne de la base, tu devrais avoir juste besoin de réinitialiser le datagrid avec la liste mise à jour et mettre à jour le formulaire avec le datagrid modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    datagrid.setData(newList) ;
    datagridForm.setDatagrid(datagrid) ;

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Points : 33
    Points
    33
    Par défaut
    dans ma jsp
    <layout:row styleClass="secure">

    <%--<layout:datagrid property="datagrid" selectionAllowed="true" multipleSelectionAllowed="false" model="datagrid">--%>
    <layout:datagrid property="datagrid" styleClass="DATAGRID" selectionAllowed="true" model="datagrid">

    <layout:datagridColumn title="Code" property="code" width="30%" />

    <layout:datagridColumn title="Libelle" property="libelle" width="50%" />


    </layout:datagrid>

    <layout:column>
    <%--<l:equal name="RefRegionsForm" property="errorType" value="1"><h:errors/></l:equal>--%>

    <h:errors/>
    <layout:button style="width:90px;" onclick="StrutsLayout.addDatagridLine('datagrid')"><b:message key="button.add"/></layout:button>
    <layout:button style="width:90px;" onclick="StrutsLayout.setDatagridLineState('datagrid', 'removed')"><b:message key="button.removed"/></layout:button>
    <layout:submit style="width:90px;" property="reqCode"><b:message key="button.valider"/></layout:submit>
    </layout:column>

    </layout:row>
    dans mon Action
    public ActionForward validateSelected(){


    RegionsForm regionsform = (RegionsForm) in_form;
    org.hibernate.Session hbsession = HibernateUtil.getSessionFactory()
    .getCurrentSession();



    // Cast the form.

    //Region regiono = null;

    Region regiono = new Region();
    regiono.setEtablissements(new ArrayList<Etablissement>());

    // Get the datagrid object.
    Datagrid lc_datagrid = regionsform.getDatagrid();

    // Get the removed objects.
    Collection lc_removedObjects = lc_datagrid.getDeletedData();
    log.debug("lc_removedObjects " + lc_removedObjects.size());
    if (lc_removedObjects.size() > 0) {
    // System.out.println("Hello");
    Iterator lc_it = lc_removedObjects.iterator();
    while (lc_it.hasNext()) {
    regiono = (Region) lc_it.next();
    log.debug(regiono.getCode());
    log.debug(regiono.getLibelle());
    log.debug("------------------------------");
    hbsession.delete(regiono);
    hbsession.flush();
    }
    // copy in only changed fields; those who have a getter in the
    // form
    org.apache.commons.beanutils.PropertyUtils.copyProperties(regionsform.getDatagrid(), regiono);
    //regionsform.setDatagrid(lc_datagrid);
    request.setAttribute("datagrid", regiono);

    // persist changes
    //hbsession.delete(regiono);
    }
    regionsform.setReqCode("display");

    // Forward to the jsp.
    return mapping.findForward("display");
    }


    ActionForward display(){
    // cc for count - cl for list
    Criteria cl = hbsession.createCriteria(Region.class);
    org.hibernate.Session hbsession = HibernateUtil.getSessionFactory().getCurrentSession();
    regionsform.setRegionsList(cl.list());
    //request.setAttribute("regionsList", cl.list());

    cl.setFirstResult(firstRecordIndex);

    //datagrid
    // Get an object list.
    List aList = regionsform.getRegionsList();

    // Create a datagrid.
    Datagrid dg = Datagrid.getInstance();
    // Set the bean class for new objects.
    //We suppose SomeBean is the class of the object in the List aList.
    dg.setDataClass(Region.class);
    // Set the data
    //dg.setData(cl.list());
    dg.setData(aList);
    // Initialize the form
    regionsform.setDatagrid(dg);
    log.debug("lc_datagrid display : "+ regionsform.getDatagrid());
    log.debug("errorType"+ regionsform.getErrorType() );

    // Forward to the jsp.
    return mapping.findForward("display");

    }
    dans mon validateSelected() je rajoute
    datagrid.setData(newList) ;
    datagridForm.setDatagrid(datagrid) ;
    mais qu'est que je retourne ?

  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
    Dans la méthode validateSelected(), le request.setAttribute("datagrid",regiono) ne sert à rien.

    Il faut réinitialiser le datagrid avec la liste des régions modifiées et mettre à jour la propriété datagrid du form-bean regionsForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lc_datagrid.setData(cl.list()) ;
    regionsform.setDatagrid(lc_datagrid) ;

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Points : 33
    Points
    33
    Par défaut
    merci c_nvy, ma jsp se rafraichit bien avec le datagrid modifié en ajoutant dans validateSelected()
    List aList = regionsform.getRegionsList();
    Criteria cl = hbsession.createCriteria(Region.class);
    //lc_datagrid.setData(aList) ;
    lc_datagrid.setData(cl.list()) ;
    regionsform.setDatagrid(lc_datagrid) ;

    en utilisant
    List aList = regionsform.getRegionsList();
    lc_datagrid.setData(aList) ;
    ça donne une list vide
    peut-être que je doit faire un
    regionsform.setRegionsList(cl.list());
    dans validateSelected(), comme j'ai fait dans display().

  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
    Une fois que tu as supprimé la ligne dans la table dans la base de données, il faut bien de nouveau interroger ta base pour reconstituer la liste des régions qui va servir à remplir le datagrid.
    Elle ne se met pas à jour toute seule.
    C'est pourquoi il faut faire de nouveau un cl.list() pour obtenir la liste des régions après mise à jour.
    Ce qui est important, c'est que le datagrid contienne la liste des régions à jour.

    Pour afficher le datagrid dans la jsp, tu as seulement besoin de définir la propriété datagrid dans l'ActionForm avec getter et setter.
    La liste des régions est un élément du datagrid et non une propriété de l'ActionForm : il n'est donc pas utile de définir régionsList comme propriété de l'ActionForm.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Points : 33
    Points
    33
    Par défaut
    dans validateSelected()
    lc_datagrid.setData(cl.list()) ;
    regionsform.setDatagrid(lc_datagrid) ;
    regionsform.getDatagrid();
    dans display()
    Criteria cl = hbsession.createCriteria(Region.class);
    org.hibernate.Session hbsession = HibernateUtil.getSessionFactory().getCurrentSession();
    regionsform.setRegionsList(cl.list());
    //request.setAttribute("regionsList", cl.list());

    cl.add(Restrictions.ilike("code", regionsform.getTmpcode()+"%"));
    cl.setFirstResult(firstRecordIndex);
    cl.setMaxResults("10");

    // Create a datagrid.
    Datagrid dg = Datagrid.getInstance();
    // Set the bean class for new objects.
    //We suppose SomeBean is the class of the object in the List aList.
    dg.setDataClass(Region.class);
    // Set the data
    //dg.setData(cl.list());
    dg.setData(aList);
    // Initialize the form
    regionsform.setDatagrid(dg);
    lorsque je clique sur valider, mon datagrid au début de 10 enregistrements visible, s'agrandit et je vois tous les éléments. Comment faire pour afficher que les 10 éléments avec la requête ? faut-il que je retape la requête du display() ?
    cl.add(Restrictions.ilike("code", regionsform.getTmpcode()+"%"));
    cl.setFirstResult(firstRecordIndex);
    cl.setMaxResults("10");

  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
    Dans validateSelected, le code suivant ne sert à rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regionsform.getDatagrid();
    tu peux le supprimer.

    Quand à l'autre question, je n'ai pas compris.
    De toute façon, je n'utilise pas Hibernate. Je ne pourrais donc sûrement pas t'aider.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Points : 33
    Points
    33
    Par défaut
    dans display()
    Criteria cl = hbsession.createCriteria(Region.class);
    org.hibernate.Session hbsession = HibernateUtil.getSessionFactory().getCurrentSession();
    regionsform.setRegionsList(cl.list());
    //request.setAttribute("regionsList", cl.list());

    cl.add(Restrictions.ilike("code", regionsform.getTmpcode()+"%"));
    cl.setFirstResult(firstRecordIndex);
    cl.setMaxResults("10");

    // Create a datagrid.
    Datagrid dg = Datagrid.getInstance();
    // Set the bean class for new objects.
    //We suppose SomeBean is the class of the object in the List aList.
    dg.setDataClass(Region.class);
    // Set the data
    //dg.setData(cl.list());
    dg.setData(aList);
    // Initialize the form
    regionsform.setDatagrid(dg);
    dans display, cl.list() est de 10 elements après la requête

    j'aimerai afficher dans validateSelected() : cl.list() de 10 elements après la requete et après modification du datagrid. faut-il que je rajoute toute la requête comme dans display ?
    car sans
    cl.add(Restrictions.ilike("code", regionsform.getTmpcode()+"%"));
    cl.setFirstResult(firstRecordIndex);
    cl.setMaxResults("10");
    j'ai la list de tous les éléments de Region.class

    dans validateSelected()
    Criteria cl = hbsession.createCriteria(Region.class);

    //je met toute la requête comme dans display
    cl.add(Restrictions.ilike("code", regionsform.getTmpcode()+"%"));
    cl.setFirstResult(firstRecordIndex);
    cl.setMaxResults("10");


    lc_datagrid.setData(cl.list()) ;
    regionsform.setDatagrid(lc_datagrid) ;
    dans display j'ai une petite liste, dans validateSelected() j'ai une grande liste qui s'affiche, or je voudrais la petite liste.

Discussions similaires

  1. [Struts-Layout] Datagrid : Erreur Unchecked Conversion
    Par Le Pharaon dans le forum Struts 1
    Réponses: 13
    Dernier message: 21/09/2007, 09h02
  2. cacher des colonnes du struts layout datagrid
    Par imsory dans le forum Struts 1
    Réponses: 1
    Dernier message: 02/04/2007, 11h28
  3. Réponses: 2
    Dernier message: 25/02/2007, 23h56
  4. Réponses: 1
    Dernier message: 26/10/2006, 17h44
  5. [Struts-layout]insérer jsp dans un tab.
    Par david06600 dans le forum Struts 1
    Réponses: 12
    Dernier message: 07/09/2006, 19h02

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