cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sylvain Wallez <sylv...@apache.org>
Subject Re: flow problem with reload button
Date Tue, 04 Oct 2005 16:35:22 GMT
Antonio Fiol BonnĂ­n wrote:

> Hello,
>
> I am having strange problems (described below) when hitting the 
> "reload" button on my browser when displaying form B in scenario 
> described below. Could anyone please help me understand why?
>
> I am using a 2-form approach to editing an XML file, one for a first 
> level view and a deeper detail editing view.
>
> Form "A" only contains a repeater with a "nombre" widget for each row, 
> plus all the necessary widgets for deleting selected rows.
> It also has a submit called "nuevo" (=Add new, see below for js code 
> managing it), a standard HTML submit button, and an edit submit button 
> on each row.
>
> Example:
> [Delete selected] [Add new] [Save changes]
> [X] [Edit] Name1
> [X] [Edit] Name2
> [X] [Edit] Name3
> [X] [Edit] Name4
>
> Form "B" is bound to the same XML file, but with more fields and 
> attributes mapped to form widgets, but it only maps a certain part of 
> the XML.
>
> Example:
> Name: [Name1]
> E-mail: [a@b.c <mailto:a@b.c>]
> [Save changes]
>
> So the binding for B is dynamically generated by a pipeline.
>
> The flow should be
> A->B->A if "Edit" or "Add new" are used.
> A->A if "delete selected" or "save changes" are used.
>
> function editarRestaurantes() {
>     // Keep important things in vars, as they will be lost from 
> cocoon.parameters
>     var formDefinitionA = cocoon.parameters["form-definition-a"];
>     var formDefinitionB = cocoon.parameters["form-definition-b"];
>     var bindingURIA = cocoon.parameters["bindingURI-a"];
>     var bindingURIBPrefix = cocoon.parameters["bindingURI-b-prefix"];
>     var saveURI = cocoon.parameters.saveURI;
>     var saveXSLT = cocoon.parameters.saveXSLT;
>     var displayPipelineLista = cocoon.parameters["displayPipeline-a"];
>     var displayPipelineFicha = cocoon.parameters["displayPipeline-b"];
>
>     var formLista = null;
>     var formFicha = null;
>     var formB = null;
>
>     var datos = leerDatos(cocoon.parameters.loadURI); // Read the XML 
> file and store into "datos"
>
>     formLista = createForm(formDefinitionA, bindingURIA, datos);
>
>     while(true) {
>
>          // display form A
>          formLista.showForm(displayPipelineLista);
>
> // *********************************
> // If I hit reload when form B is displayed, execution is resumed 
> here, but formLista is undefined
> // Why is it "null"? Shouldn't it be restored to the previous value 
> because of my hitting "Reload".
> // *********************************
>       
>         var submitWidget = formLista.getWidget().getSubmitWidget();
>         var idRestaurante = "";
>
>         // Did the user not click the "Save changes" button?
>         if(submitWidget!=null) {
>             cocoon.log.info(submitWidget);
>             // Did the user click "Add new"?
>             if(submitWidget.id=="nuevo") {
>                 // To add a new record, we ask the repeater to do so.
>                 var repeater = 
> submitWidget.parent.lookupWidget('restaurantes');
>                 repeater.addRow();
>                 // New record is last, so get the repeater size
>                 idRestaurante = repeater.size;
>             } else {
>                 // Clicked "Edit", ... which row?
>                 idRestaurante = 
> submitWidget.getParent().lookupWidget('id').value;
>             }
>             formLista.save(datos);
>             formLista = null;
>
>             // Prepare form B, using the ID for the new or edited record
>             formFicha = createForm(formDefinitionB, 
> bindingURIBPrefix+idRestaurante, datos);
>
> // ***********************
> // Form B is displayed on next line
> // ***********************
>
>             formFicha.showForm(displayPipelineFicha);
>             formFicha.save(datos);
>             formFicha = null;
>
>             formLista = createForm(formDefinitionA, bindingURIA, datos);
>         } else {
>             formLista.save(datos);
>         }
>         grabarDatos(saveURI, saveURI+".tmp", saveXSLT, datos);
>
>     }
> }
>
> function createForm(definition, binding, datos) {
>     var form = new Form(definition);
>     if (binding != null) {
>         form.createBinding(binding);
>     }
>     form.load(datos);
>     return form;
> }
>
>
>
> Thank you very much for any hint, and sorry for the long e-mail. I 
> tried hard to make it shortest possible.


Do you use GET or POST methods in form A?

If you use GET, you display form B with a URL of the type 
"page?continuation-id=contForA", which will be mixed with the hidden 
"continuation-id" parameter in the form. Which one is sent first in the 
request is browser-dependent, and it may be the case that posting puts 
first the hidden field first whereas reloading just sends the 
continuation for formA which is in the URL.

Sylvain

-- 
Sylvain Wallez                        Anyware Technologies
http://people.apache.org/~sylvain     http://www.anyware-tech.com
Apache Software Foundation Member     Research & Technology Director


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org


Mime
View raw message