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 :

[PrimeFaces] Rafraichir un Backing bean dans un bouton


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut [PrimeFaces] Rafraichir un Backing bean dans un bouton
    Bonjour,

    J'ai un bouton qui me permet de valider des factures.
    J'aimerais, si il y a eu une erreur dans le traitement, qu'une boîte de dialogue apparaisse en affichant les erreurs et me demandant si on veut ou non continuer la suite de la validation.

    J'ai donc créé mon bouton avec l'action qui me permet ce traitement. A la fin du traitement, si j'ai une erreur, je modifie la variable "dialogBoxErr" assignée à un "oncomplete" qui est vide par défaut, en "confirmation.show()" afin d'afficher la boîte de dialogue à la fin du traitement.

    malheureusement, au premier clic sur le bouton, le traitement se fait correctement et la variable est bien modifiée mais la boite de dialogue n'apparaît pas.
    par contre, au 2 eme clic, la boîte apparaît... je suppose qu'il faut rafraichir la variable dans la vue juste après que le traitement soit terminé... mais je ne sais pas comment je peux faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <p:commandButton id="butfacturesatt" value="Valider les factures AUTO" action="#{factureController.doValiderAutoFacturesATTENTE(factureController.facturesAttente)}"
              oncomplete="#{factureController.dialogBoxErr}" update=":messageGroup,butfacturesatt,:dlgform:dlgErreurFactAtt#{factureController.retErreurUpd}"  >
     
    </p:commandButton>
    Ou si vous avez une autre solution pour afficher une boite de dialogue si il y a des erreurs, elle est la bienvenue.

    Merci pour votre aide.

  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
    Bonjour,
    Peut on voir le contenu de cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #{factureController.dialogBoxErr}
    , ainsi que le code de la vue en cours? Je veux bien voir la déclaration de ta boite dialogue.

  3. #3
    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
    Ce que je te conseillerais comme méthode c'est dans le commandButton tu as la méthode principale de validation appelée par le tag "action" (comme actuellement).

    Dans cette méthode tu fais toutes tes vérifications, et à la fin de ta méthode tu appelles ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RequestContext context = RequestContext.getCurrentInstance();
    context.addCallbackParam("nom_variable_booleene", valeur_variable_booleene);
    Ceci te permetteras d'envoyer un paramètre de retour du serveur vers le client.
    Pour le récupérer il te suffit de mettre dans ta méthode oncomplete, un apel à un type de fonction javascript spécifique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    oncomplete="handleDialogErrorRequest(xhr, status, args);"
    Suite à ça, déclare dans tes fonctions javascript, celle que nous avons voulu appeler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <script type="text/javascript"> 
    function handleDialogErrorRequest(xhr, status, args) {  					 
          if(args.nom_variable_booleene) 
          {
              nom_de_ta_boite_de_dialog.show();
          }							   
    } 
    </script>
    Le booléan que tu as voulu envoyer sera donc intercepté, et tu peux donc le traiter pour faire un affichage conditionnel de ta boite de dialogue.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut
    Excellent ça fonctionne avec la fonction javascript ! il faudra que je mémorise addCallbackParam, cela me sera bien utile ^^
    Merci infiniment !

    pour répondre à DevServlet, dialogBoxErr est un simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        public String getDialogBoxErr() {
            return dialogBoxErr;
        }
    qui a été initialisé à "" par défaut, puis à "confirmation.show()" si il y a eu une erreur lors du traitement de la méthode "doValiderAutoFacturesATTENTE(...)".

    pour le code de la vue :


    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
    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    To change this template, choose Tools | Templates
    and open the template in the editor.
    -->
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:p="http://primefaces.org/ui"
          xmlns:f="http://java.sun.com/jsf/core">
     
        <ui:composition template="/template.xhtml">
     
            <ui:define name="title">
                <h:outputText value="FDS - Facturation"></h:outputText>
            </ui:define>
     
            <ui:define name="center">
                <h1>Facturation - EN ATTENTE</h1>
                <h:panelGroup id="messageGroup" layout="block">
                    <p:messages showSummary="true" showDetail="true" id="messages" />
                </h:panelGroup>
                <h:form id="formbase">
                    <center>
                        <p:ajaxStatus style="width:16px;height:16px;">
                            <f:facet name="start">
                                <h:graphicImage value="/Img/ajax-loader.gif" />
                            </f:facet>
     
                            <f:facet name="complete">  
                                <h:outputText value="" />
                            </f:facet>
                        </p:ajaxStatus>
                    </center>
     
                    <h:panelGrid columns="5">
                        <h:outputLabel for="ddebID" value="DU : " />
                        <p:calendar id="ddebID" value="#{factureController.ddebutSelection}" navigator="true" >
                            <p:ajax event="dateSelect" update=":messageGroup" />
                        </p:calendar>
                        <h:outputLabel for="dfinID" value="AU : " />
                        <p:calendar id="dfinID" value="#{factureController.dfinSelection}" navigator="true">
                            <p:ajax event="dateSelect" update=":messageGroup" />
                        </p:calendar>
                        <p:commandButton value="Afficher les factures en attente" action="#{factureController.doAffichFactAttente}" ajax="false"/>   
                    </h:panelGrid>
     
                    <!-- FACTURES ATTENTE -->
     
                    <p:dataTable id="facturesAtt" value="#{factureController.facturesAttente}" var="fact"  emptyMessage="Aucune facture trouvée" >                    
                        <f:facet name="header">
                            <p:commandButton rendered="#{!factureController.facturesAttente.isEmpty()}" action="#{factureIndivPDF.generationALL(factureController.facturesAttente)}" value ="Voir Tout" ajax="false" />
                            <p:commandButton id="butfacturesatt" value="Valider les factures AUTO" action="#{factureController.doValiderAutoFacturesATTENTE(factureController.facturesAttente)}"
              oncomplete="#{factureController.dialogBoxErr}" update=":messageGroup,butfacturesatt,:dlgform:dlgErreurFactAtt#{factureController.retErreurUpd}"  >
     
                             </p:commandButton>
                        </f:facet>
                        <p:column>
                            <p:commandButton action="#{factureIndivPDF.generation(fact)}" value ="Voir" ajax="false"/>
                            <!-- onclick="window.open(this.href); return false; "-->
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Numéro" />
                            </f:facet>
                            <h:outputText value="#{fact.factId}" />
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Enfant" />
                            </f:facet>
                            <h:outputText value="#{fact.fkEnfant.fkPersonne.persPrenom} #{fact.fkEnfant.fkPersonne.persNom}" />
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Statut" />
                            </f:facet>
                            <h:outputText value="#{fact.fkStatutfacture.statfactNom}" />
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Montant tot." />
                            </f:facet>
                            <h:outputText  value="#{fact.factMontantoa + fact.factMontantpatient}" >
                                <f:convertNumber currencyCode="EUR" type="currency" />
                            </h:outputText>
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Date de création" />
                            </f:facet>
                            <h:outputText  value="#{fact.factDatecreation}" >
                                <f:convertDateTime pattern="dd/MM/yyyy" />
                            </h:outputText>
                        </p:column>
                    </p:dataTable>
     
     
                </h:form>
                <h:form id="dlgform">
                    <h:panelGroup id="dlgErreurFactAtt" layout="block">
                        <p:dialog  modal="true" height="300" width="450" resizable="false" draggable="false"  header="Dates d'accord incorrect"
                                   widgetVar="confirmation">
                            Des erreurs dues aux dates d'accord sont survenues lors de la validation pour ces enfants.<br/>
                            Voulez-vous tout de même traiter les factures ?<br/><br/>
                            Si oui, des factures récap. seront créées pour les factures valides.
                            Il y aura d'autres création de factures récap. pour les factures qui seront rectifiées.<br/>
                            <br/>
                            <center><p:inputTextarea readonly="true" autoResize="false"  cols="50" rows="3" value="#{factureController.dlgTextAreaErr}"/></center>
                            <br/><hr /><br/>
                            <p:commandButton id="confirm" value="Oui" update=":messageGroup,:formbase:facturesAtt"
                                             onclick="confirmation.hide()"
                                             action="#{factureController.doValiderFactAtt(factureController.facturesAttente)}" />
                            <p:commandButton id="decline" value="Non" onclick="confirmation.hide()" type="button" />
                        </p:dialog>
                    </h:panelGroup>
                </h:form>
            </ui:define>
        </ui:composition>
    </html>
    merci encore ! ;-)

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

Discussions similaires

  1. Portée dans un backing bean
    Par sepointes dans le forum JSF
    Réponses: 8
    Dernier message: 19/12/2013, 08h35
  2. Réponses: 1
    Dernier message: 30/09/2013, 14h06
  3. Réponses: 16
    Dernier message: 17/01/2010, 09h33
  4. Réponses: 1
    Dernier message: 06/05/2008, 16h09

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