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: [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>]
[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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]