cocoon-users-fr mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marc Salvetti <m...@notremanou.net>
Subject Pb cforms + bouton precedent
Date Tue, 06 Sep 2005 10:51:20 GMT
Bonjour,

j'ai un problème avec cforms quand l'utilisateur clique sur le bouton 
precedent. J'utilise la technique des forms multipage decrite dans les 
exemples cocoon, a savoir, sur chaque page du formulaire j'ai des 
widgets action qui ne sont pas cencés terminer la fonction 
form.showForm(displayPipeline) sauf si on appelle endFormProcessing, ce 
que je ne fait pas. Il y a un moment, j'avais posté un mail à ce sujet 
et n'avais pas obtenu de réponse.
Le problème est que quand l'utilisateur clique sur précedent dans le 
navigateur, puis clique sur le bouton suivant du formulaire, le 
comportement normal voudrait que le form soit envoyé et le code js 
spécifié dans le <on-action> du bouton next soit executé, or le js n'est 
pas executé, l'execution du showform se termine, et la fonction 
getSubmitWidget() renvoie null.

Voici le code que j'utilise :
sur le bouton "next" de la premiere page du formulaire :

                      <fd:action id="show-paxlist" validate="true">
                        <fd:label><i18n:text catalogue="divers" 
key="next"/></fd:label>
                        <fd:on-action>
                            <fd:javascript>
                                cocoon.log.debug("show-paxlist clicked");
                                var parent = event.source.parent;
                                onEndBooking(event);
                                if(parent.validate()){
                                    onShowPaxList(event);
                                }
                            </fd:javascript>
                        </fd:on-action>
                      </fd:action>

puis l'appel a showForm ds le flow :

pour essayer de regler le problème, j'ai mis l'appel a showForm ds une 
boucle

    // show the form to the user until it is validated successfully
    var submitWidget = wBooking != null ? 
wBooking.getForm().getSubmitWidget() : null ;
    while(submitWidget == null){
        form.showForm(displayPipeline);
        submitWidget = wBooking.getForm().getSubmitWidget();
        //Protect from the bug when user press the back button
        if(submitWidget == null){           
            cocoon.log.debug("back button pressed");
            //Find the page to activate :
            var wActivePage = null;
            var wCartBooking = 
wBooking.getForm().getChild("cartBookings").getRow(pos);
            if(wCartBooking.lookupWidget("cart").getState() == 
WidgetState.ACTIVE || wCartBooking.lookupWidget("paxlist").getState() == 
WidgetState.ACTIVE){
                wActivePage = wCartBooking.lookupWidget("cart");
            }else 
if(wCartBooking.lookupWidget("registration").getState() == 
WidgetState.ACTIVE || 
wCartBooking.lookupWidget("invoice-manager").getState() == 
WidgetState.ACTIVE){
                wActivePage = wCartBooking.lookupWidget("paxlist");
            }else 
if(wCartBooking.lookupWidget("cart/agency-manager").getValue().equals("0")){
                wActivePage = wCartBooking.lookupWidget("registration");
            }else{
                wActivePage = wCartBooking.lookupWidget("paxlist");
            }
           
            
wCartBooking.lookupWidget("cart").setState(WidgetState.INVISIBLE);
            
wCartBooking.lookupWidget("paxlist").setState(WidgetState.INVISIBLE);
            
wCartBooking.lookupWidget("registration").setState(WidgetState.INVISIBLE);
            
wCartBooking.lookupWidget("invoice-manager").setState(WidgetState.INVISIBLE);
            
wCartBooking.lookupWidget("validate").setState(WidgetState.INVISIBLE);
            wActivePage.setState(WidgetState.ACTIVE);
        }
    }


Ca marche mais ce n'est pas très clean, et le code du <on-action> n'est 
pas appelé, ce qui crée d'autres problèmes :(

Quelqu'un sait si ce problème de bouton précedent à une solution plus 
imple que celle ci ?
Sinon une idée pour déclencher l'evenement on-action manuellement ?

Merci,

Marc

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Mime
View raw message