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

JSF Java Discussion :

Schedule et event (personnalisé ?) persistant


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2012
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 42
    Par défaut Schedule et event (personnalisé ?) persistant
    Salut à tous,

    j'ai mis en place un schedule dans mon application qui fonctionne très bien.

    J'ai une liste d'utilisateurs et à chaque changement, j'appelle cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void changement() {
    		getEventModel().clear();
    		for (Mission i : getMissions()) {
    			getEventModel().addEvent(new DefaultScheduleEvent(i.getProjet().getNom(), i.getDebut(), i.getFin()));
    		}
    	}
    getMissions() me renvoie une liste d'objet Mission via la fonction findAll() implémentée dans le patter Facade.

    Je peux donc visualiser, pour chaque utilisateur, les missions qu'il possède.

    Maintenant j'aimerai pouvoir modifier les périodes de ces missions. Lorsque je modifie une période (event="eventResize" dans mon xhtml), je vois bien que mon objet Event est modifié mais comment puis je reporter cette modification dans ma base de données ?

    • En résumé, comment faire la liaison entre mon objet Mission (à modifier) et l'objet Event modifié ? par l'index ça marche mais est-ce la seule solution ?


    Autre question :
    • Lors de l'ajout d'un Event dans ma méthode changement(), je créer un objet DefaultScheduleEvent qui possède des attributs définis (titre, dateD, dateF). Est-il possible d'ajouter un Event avec des objets de mon choix ? (pour par la suite, pouvoir également les modifier du schedule) Si oui, comment ?


    j'espère avoir été claire. merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 162
    Par défaut
    Bonjour lolila,

    En ce qui concerne ton problème, il faut comprendre que l'objet DefaultScheduleEvent est une sorte d'objet Graphique. Ils (Primefaces) ont besoin d'une base statique pour créer l'agenda coté client. Si l'on autorisait n'importe quel objet à la place de DefaultScheduleEvent, la génération de code coté client ne saurait pas dans quel attribut chercher les dates et les libellés.

    Par contre en observant l'API, on peut voir que l'objet DefaultScheduleEvent propose un objet Data. Il est prévu pour pouvoir stocker les données spécifiques de ton événement.

    Du coup, au chargement de ton calendrier pour chaque événement que tu renseignes, tu peux aussi associer l'objet du type de ton choix (Mission ?) dans cet attribut, et ainsi lors de la modification, récupérer cet objet grâce à la méthode getData(), et le modifier aisément, sans avoir à utiliser l'index ou tout autre méthode.

  3. #3
    Membre averti
    Inscrit en
    Juin 2012
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 42
    Par défaut
    Merci bien, je n'avais pas vue cela.

    Citation Envoyé par lolila Voir le message
    Maintenant j'aimerais pouvoir modifier les périodes de ces missions. Lorsque je modifie une période (event="eventResize" dans mon xhtml), je vois bien que mon objet Event est modifié mais comment puis je reporter cette modification dans ma base de données ?
    J'ai donc ajouté l'objet mission à mon Event :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void changement() {
    		getEventModel().clear();
    		for (Mission i : getMissions()) {
                            // Affichage avant création event
                            System.out.println(i.getFin().toString());
    			getEventModel().addEvent(new DefaultScheduleEvent(i.getProjet().getNom(), i.getDebut(), i.getFin(), i));
    		}
    	}
    L'affichage met : Wed Jul 25 18:00:00 CEST 2012

    Et lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mission = (Mission) event.getScheduleEvent().getData();
    System.out.println(mission.getFin().toString());
    mission.setRatio(50);
    missionBean.edit(mission);
    L'affichage met : INFO: Thu Jul 26 18:00:00 CEST 2012

    La modification est bien prise en compte dans mon objet mission mais en base de données, je vois uniquement le ratio qui a changé. La date reste inchangée. Pourquoi ?

    Ajout test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Mission mission2 = getMissions().get(2);
    mission2.setFin(new Date());
    missionBean.edit(mission2);
    Cela modifie bien la date dans la base en date courante.

    le problème vient bien de la date mise dans l'Event. Mais que faire ?

    --------------------
    Attribut fin de mon entité Mission :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Temporal(TemporalType.TIMESTAMP)
    private Date fin;

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 162
    Par défaut
    Pourrais-tu me donner le code du contenu de ta méthode edit ?

  5. #5
    Membre averti
    Inscrit en
    Juin 2012
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 42
    Par défaut
    Le voici (pattern Façade)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void edit(T entity) {
    	getEntityManager().merge(entity);
    }
    j'ai essayé une chose de plus :
    utiliser un composant Calendar (Primefaces) pour changer la dateEnd dans un objet DefaultScheduleEvent (sélectionné) ne pose pas de problème pour persister le changement. Contrairement à l'utilisation de l’event="eventResize"...

    Pourtant, c'est la même dateEnd qui est modifiée...

  6. #6
    Membre averti
    Inscrit en
    Juin 2012
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 42
    Par défaut
    il y a quelque chose de louche...

    une fois la modification faite et que j'effectue une requête comme celle-ci (appelé dans getMissions du managedBean):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Query requete;
    List<Intervention> listresult;
    requete = em.createQuery("SELECT m FROM mission m WHERE :user = m.user.id");
    requete.setParameter("user", user);
    listresult = requete.getResultList();
    return listresult;
    Ma liste contiendra bien la date changée... Mais si j'effectue une requête par le Open SQL ScrapBook d'Eclipse, je ne la vois pas changer.
    Contrairement à une date changée par l'intermédiaire du Calendar.

    Si je redéploie mon EAR, la modification n'y est plus. Une sorte de roolback quoi.



    bd : Derby 10.8.2.2

  7. #7
    Membre averti
    Inscrit en
    Juin 2012
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 42
    Par défaut
    En regardant les requêtes envoyées par la persistance, je vois que la requête d'update n'est pas envoyé quand je passe dans le merge.

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Date date = new Date ();
    Et remplace dans le setFin la date de lEvent par la variable date, je vois bien l'update...

    Qu'est ce qu'il peut empêcher l'update dans le premier cas ?

Discussions similaires

  1. Contrôle personnalisé et event
    Par Invité dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 24/06/2010, 22h20
  2. MySQL Events Scheduler
    Par womannosky dans le forum Administration
    Réponses: 2
    Dernier message: 14/04/2010, 15h36
  3. event scheduler qui ne s'éxécute pas
    Par HAbroc dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/04/2009, 22h10
  4. jour spécifique dans l'event scheduler
    Par gnomathibus dans le forum Administration
    Réponses: 3
    Dernier message: 01/04/2009, 18h58
  5. Event scheduler
    Par Philtk dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/05/2006, 11h07

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