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 :

CommandButton: Effectuer action avant le chargement de la Datatable


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 126
    Par défaut CommandButton: Effectuer action avant le chargement de la Datatable
    Bonjour, j'ai une question pourtant sur le cycle de vie pour une action.

    Actuellement, j'ai une rich:datatable qui est remplie au chargement de la page.
    Dans cette datatable, chaque cellule est composée d'une CheckBox.

    J'ai aussi un bouton h:commandButton "Apply Change" à l'extérieur de ce tableau.
    Le tout dans une h:form

    L'action "Apply Change" va sauvegarder dans la base de données les changements effectués dans le tableau.

    Mon problème est que lorsque j'appuie sur le bouton et il réappelle la fonction peuplant le tableau avant d'avoir sauver les changements dans la base de données.

    Donc, j'ai mon tableau qui ne comporte pas toutes mes modifications mais celles-ci sont bien répercutées dans la base de données.

    J'ai essayé d'ajouter à mon h:commandButton, l'attribut "Immediate" à "True". Mais çà ne fonctionne quand même pas.

    Merci d'avance pour votre aide.

    Julien Garcia Gonzalez

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Fais nous voir le code de ta page jsf et le managedBean associé.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 126
    Par défaut
    page jsf:
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:rich="http://richfaces.org/rich"
          xmlns:a4j="http://richfaces.org/a4j"
          xmlns:f="http://java.sun.com/jsf/core"
          template="../resources/templates/template.xhtml"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:c="http://java.sun.com/jsp/jstl/core">
     
        <ui:define name="content">
     
        </ui:define>
     
        <ui:define name="details">
     
           <h:form id="form">
               <rich:dataTable value="#{intervenantAdministration.availabilityTeacherRows}" var="availability">
                    <f:facet name="header">
                        <rich:columnGroup>
                            <rich:column rowspan="2">
                            </rich:column>
                            <c:forEach items="#{intervenantAdministration.daysOfWeek}" var="dayOfWeek" >
                                <rich:column>
                                    <h:outputText value="#{dayOfWeek}" />
                                </rich:column>
                            </c:forEach>
                        </rich:columnGroup>
                    </f:facet>
                    <rich:column>
                        <h:outputText value="#{availability.heure} :00 - #{availability.heure+1}:00" />
                    </rich:column>
                    <rich:column>
                        <h:selectBooleanCheckbox value="#{availability.mondayAvailable}" />
                    </rich:column>
                    <rich:column>
                        <h:selectBooleanCheckbox value="#{availability.tuesdayAvailable}" />
                    </rich:column>
                    <rich:column>
                        <h:selectBooleanCheckbox value="#{availability.thursdayAvailable}" />
                    </rich:column>
                    <rich:column>
                        <h:selectBooleanCheckbox value="#{availability.wednesdayAvailable}" />
                    </rich:column>
                    <rich:column>
                        <h:selectBooleanCheckbox value="#{availability.fridayAvailable}" />
                    </rich:column>
                    <rich:column>
                        <h:selectBooleanCheckbox value="#{availability.saturdaydayAvailable}" />
                    </rich:column>
     
                </rich:dataTable>
     
               <h:commandButton action="#{intervenantAdministration.applyChanges}" value="Sauvegarder les changements" immediate="true" />
           </h:form>
        </ui:define>
     
    </ui:composition>
    managedbean intervenantAdministration:
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    @ManagedBean
    @RequestScoped
    public class IntervenantAdministration {
     
        private ArrayList<AvailabilityTeacherRow> availabilities;
        private ArrayList<Calendar> days = new ArrayList<Calendar>();
        private int idPerson;
     
        @EJB
        private PersonFacadeLocal personFL;
     
        // <editor-fold defaultstate="collapsed" desc="Properties">
        public int getIdPerson() {
            return idPerson;
        }
     
        public void setIdPerson(int idPerson) {
            this.idPerson = idPerson;
        }
     
        public ArrayList<Calendar> getDays() {
            return days;
        }
     
        public void setDays(ArrayList<Calendar> days) {
            this.days = days;
        }
     
        public ArrayList<AvailabilityTeacherRow> getAvailabilities() {
            return availabilities;
        }
     
        public void setAvailabilities(ArrayList<AvailabilityTeacherRow> availabilities) {
            this.availabilities = availabilities;
        }// </editor-fold>
     
     
        /** Creates a new instance of IntervenantAdministration */
        public IntervenantAdministration() {
     
            days = new ArrayList<Calendar>();
            Calendar cal = GregorianCalendar.getInstance();
            cal.add(Calendar.DAY_OF_MONTH, -(cal.get(Calendar.DAY_OF_WEEK)-Calendar.MONDAY));
     
     
            days.add(Utils.copyCalendar(cal));
     
            cal.add(Calendar.DAY_OF_MONTH, 1);
     
            days.add(Utils.copyCalendar(cal));
     
            cal.add(Calendar.DAY_OF_MONTH, 1);
     
            days.add(Utils.copyCalendar(cal));
     
            cal.add(Calendar.DAY_OF_MONTH, 1);
     
            days.add(Utils.copyCalendar(cal));
     
            cal.add(Calendar.DAY_OF_MONTH, 1);
     
            days.add(Utils.copyCalendar(cal));
     
            cal.add(Calendar.DAY_OF_MONTH, 1);
     
           days.add(Utils.copyCalendar(cal));
     
           availabilities = new ArrayList<AvailabilityTeacherRow>();
     
     
           //TODO: To Remove
           idPerson = 3;
        }
     
        public ArrayList<String> getDaysOfWeek(){
            ArrayList<String> daysOfWeek = new ArrayList<String>();
     
            daysOfWeek.add("Lundi " + days.get(0).get(Calendar.DAY_OF_MONTH));
            daysOfWeek.add("Mardi " + days.get(1).get(Calendar.DAY_OF_MONTH));
            daysOfWeek.add("Mercredi " + days.get(2).get(Calendar.DAY_OF_MONTH));
            daysOfWeek.add("Jeudi " + days.get(3).get(Calendar.DAY_OF_MONTH));
            daysOfWeek.add("Vendredi " + days.get(4).get(Calendar.DAY_OF_MONTH));
            daysOfWeek.add("Samedi " + days.get(5).get(Calendar.DAY_OF_MONTH));
     
            return daysOfWeek;
        }
     
        public ArrayList<AvailabilityTeacherRow> getAvailabilityTeacherRows(){
            availabilities = new ArrayList<AvailabilityTeacherRow>();
            availabilities.add(new AvailabilityTeacherRow(personFL.find(idPerson), new Calendrier(days.get(0),9)));
            availabilities.add(new AvailabilityTeacherRow(personFL.find(idPerson), new Calendrier(days.get(0),10)));
            availabilities.add(new AvailabilityTeacherRow(personFL.find(idPerson), new Calendrier(days.get(0),11)));
            availabilities.add(new AvailabilityTeacherRow(personFL.find(idPerson), new Calendrier(days.get(0),13)));
            availabilities.add(new AvailabilityTeacherRow(personFL.find(idPerson), new Calendrier(days.get(0),14)));
            availabilities.add(new AvailabilityTeacherRow(personFL.find(idPerson), new Calendrier(days.get(0),15)));
            availabilities.add(new AvailabilityTeacherRow(personFL.find(idPerson), new Calendrier(days.get(0),16)));
            availabilities.add(new AvailabilityTeacherRow(personFL.find(idPerson), new Calendrier(days.get(0),17)));
     
            for(AvailabilityTeacherRow item: availabilities){
                item.manageAvailability();
            }
     
            return availabilities;
        }
     
        @EJB
        CalendrierFacadeLocal calendrierFL;
     
        @EJB
        AvailabilityOfInstructorFacadeLocal availabilityOfInstructorFL;
     
        @EJB
        AvailabilityOfTeacherFacadeLocal availabilityOfTeacherFL;
     
        public String applyChanges(){
            for(AvailabilityTeacherRow item: availabilities){
                item.updateStatus(calendrierFL,availabilityOfInstructorFL,availabilityOfTeacherFL);
            }
     
            return null;
        }

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 126
    Par défaut
    Chose plus étrange encore, lorsque je fais la modification, elle s'inscrit bien dans la base de données mais ne s'affiche pas sur ma page.
    Je relance l'application (mode normal) via netbeans la donnée ne s'affiche toujours pas, par contre il faut que je relance l'application en debug pour voir s'afficher ma donnée.

  5. #5
    Membre chevronné

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Par défaut
    Citation Envoyé par garciajulien Voir le message
    J'ai essayé d'ajouter à mon h:commandButton, l'attribut "Immediate" à "True". Mais çà ne fonctionne quand même pas.
    L'usage que tu en fais est inapproprié. Lisons la doc:
    The immediate attribute is a boolean flag indicating that component events should be sent to registered event listeners immediately rather than after the validation phase of the JSF request processing lifecycle. The immediate flag allows you bypass JSF validation for a particular component.
    Autrement dit, l'utilisation de cet attribut permet de sauter la phase de validation du modèle. Par conséquent, les contraintes que tu auras pu placer au moyen d'annotations (e.g @NotNull) dans les classes du modèle ne seront pas vérifiées et ne bloqueront pas la soumission du formulaire. C'est tout.


    Pour revenir à ton problème, tu peux toujours essayer de redéclencher un refresh de la datatable après la fin de son rechargement
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    En effet immediate= "true" a pour seul role d'outrepasser les validauteurs de formulaires (comme les required = "true", etc...)
    Mets ton bean en sessionScoped et mets un reRender = "id_de_ton_datatable_" dans ton commandButton. Ca marchera mieux après.

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 126
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    ... mets un reRender = "id_de_ton_datatable_" dans ton commandButton. Ca marchera mieux après.
    Le rerender, il n'y en a pas sur un h:commandButton mais plutot sur un a4j:CommandButton.

    Le remplace le h:commandbutton par un a4j:commandbutton?
    d'ailleurs dans la version de richfaces que j'utilise a4j:commandbutton n'a pas d'attribut reRender.

    Voila la ligne modifiée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <a4j:commandButton action="#{intervenantAdministration.applyChanges}" value="Sauvegarder les changements" render="data" />

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Et alors?

  9. #9
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 126
    Par défaut
    Excuse-moi, oublié de dire que çà ne fonctionne pas il me refresh la page, il m'ajoute les data dans la bd mais ne me les met pas dans ma table.

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/04/2015, 12h03
  2. Message Loading avant le chargement de l'action struts
    Par jaljal dans le forum Struts 1
    Réponses: 3
    Dernier message: 11/12/2009, 11h30
  3. [Debutant][Bouton Radio]action avant un clic
    Par jazer dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/10/2006, 14h18
  4. Réponses: 4
    Dernier message: 31/08/2006, 11h25
  5. [resolulu][SWING] action avant de fermer une JFrame
    Par berg dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 17/06/2006, 23h15

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