You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by Antonio Fiol Bonnín <an...@gmail.com> on 2005/06/30 14:30:31 UTC

REPOST: row-actions move-up and move-down not working

Any hints, please?
I've been trying different things but I am completely lost. If only someone 
could direct my research a bit, it would be really helpful.

Yours,

-- 
Antonio

---------- Forwarded message ----------
From: Antonio Fiol Bonnín <an...@gmail.com>
Date: 27-jun-2005 10:24
Subject: move-up and move-down not working
To: users@cocoon.apache.org

Hello,

I am using a repeater with move-up and move-down row-action buttons.

Adding, deleting, and modifying works perfectly. move-up and move-down do 
not work.

Can anyone help me track the problem down?

Note: The "componentes" empty element is filled with "persona" elements by 
another form. The other elements on the empty "grupo" template are mapped to 
the fields I removed for simplicity.

Thank you very much.

-- 
Antonio


-------------------
definition:
<fd:form xmlns:fd="http://apache.org/cocoon/forms/1.0#definition"
xmlns:xi="http://www.w3.org/2001/XInclude"
<http://www.w3.org/2001/XInclude%22>>

<fd:widgets>
<fd:repeater id="grupos">
<fd:widgets>
<fd:output id="id">
<fd:datatype base="long" />
</fd:output>
<fd:field id="nombre" required="true">
<fd:label>Nombre</fd:label>
<fd:datatype base="string"/>
<fd:validation>
<fd:length min="2" />
</fd:validation>
</fd:field>
<!-- Several other fields -->
<fd:booleanfield id="select">
<fd:label>Sel.</fd:label>
</fd:booleanfield>
<fd:row-action id="subir" action-command="move-up">
<fd:label>Subir</fd:label>
</fd:row-action>
<fd:row-action id="bajar" action-command="move-down">
<fd:label>Bajar</fd:label>
</fd:row-action>

</fd:widgets>
</fd:repeater>
<fd:repeater-action id="addgrupo" action-command="add-row" 
repeater="grupos">
<fd:label>Añadir grupo</fd:label>
</fd:repeater-action>
<fd:repeater-action id="delgrupo" action-command="delete-rows" 
repeater="grupos" select="select">
<fd:label>Eliminar grupos seleccionadas</fd:label>
</fd:repeater-action>
</fd:widgets>
</fd:form>

-------------------------
binding:
<fb:context
xmlns:fb="http://apache.org/cocoon/forms/1.0#binding"
xmlns:fd="http://apache.org/cocoon/forms/1.0#definition"
path="/" >

<fb:repeater id="grupos"
parent-path="grupos"
row-path="grupo">

<fb:identity>
<fb:value id="id" path="@id">
<fd:convertor datatype="long" />
</fb:value>
</fb:identity>

<fb:on-bind>
<fb:value id="id" path="@id" direction="load">
<fd:convertor datatype="long" />
</fb:value>
<fb:javascript id="id" path="@id" direction="save">
<fb:save-form>
var formValue = widget.getValue();
if(formValue > 0) {
jxpathPointer.setValue(formValue);
} else {
jxpathPointer.setValue(new Packages.java.lang.Long(
Packages.java.lang.System.currentTimeMillis()).toString());
Packages.java.lang.Thread.sleep(5); // Garantiza que 
System.currentTimeMillis() sea único.
}
</fb:save-form>
</fb:javascript>
<fb:value id="nombre" path="datos/nombre" />
<!-- Other fb:value for other fields -->
</fb:on-bind>

<fb:on-delete-row>
<fb:delete-node />
</fb:on-delete-row>
<fb:on-insert-row>
<fb:insert-node>
<grupo id="">
<datos>
<nombre/>
<tipo/>
<padre id=""/>
<descripcion/>
<plantas/>
<extension/>
<telefonoDirecto/>
<fax/>
</datos>
<componentes/>
</grupo>
</fb:insert-node>
</fb:on-insert-row>
</fb:repeater>
</fb:context>


----------------
flow:
function grupos(form) {
var datos = leerDatos("xml/forms/datos/grupos.xml");

form.load(datos);
form.showForm("grupos-form-display-pipeline");
form.save(datos);

grabarDatos("xml/forms/datos/grupos.xml", "xml/forms/datos/grupos.xml.tmp", 
datos);
cocoon.sendPage("grupos-form-success-pipeline");
}

grabarDatos is a function streaming the XML to a tmp file and then moving it 
on success to the real file.
leerDatos reads the XML file into a DOM.

Fwd: REPOST: row-actions move-up and move-down not working

Posted by Antonio Fiol Bonnín <an...@gmail.com>.
The reason I think developers should know about this is:

- move-up and move-down seemed to move rows up and down on the form, but 
changes in the order of rows were not saved to XML.
- Even binding a field called "order" to the position brought in strange 
results, as the move-up and move-down made the unmapped parts of the XML to 
be swapped. See the following example for the meaning of this:

<a>
<b order="1">
<bound>abc</bound>
<unbound>
<unbound-child id="1" />
</unbound>
</b>
<b order="2">
<bound>def</bound>
<unbound>
<unbound child id="2" />
</unbound>
</b>
</a>

desired effect is:
<a>
<b order="1">
<bound>def</bound>
<unbound>
<unbound child id="2" />
</unbound>
</b>
<b order="2">
<bound>abc</bound>
<unbound>
<unbound-child id="1" />
</unbound>
</b>
</a>

or maybe the following could be acceptable, as I can later sort by @order:
<a>
<b order="2">
<bound>abc</bound>
<unbound>
<unbound-child id="1" />
</unbound>
</b>
<b order="1">
<bound>abc</bound>
<unbound>
<unbound child id="2" />
</unbound>
</b>
</a>

But definitely not:
<a>
<b order="1">
<bound>def</bound>
<unbound>
<unbound-child id="1" /><!-- This corresponds to abc, not def !!! -->
</unbound>
</b>
<b order="2">
<bound>abc</bound>
<unbound>
<unbound child id="2" /><!-- This corresponds to abc, not def !!! -->
</unbound>
</b>
</a>

Hope



---------- Forwarded message ----------
From: Antonio Fiol Bonnín <an...@gmail.com>
Date: 27-jun-2005 10:24
Subject: move-up and move-down not working
To: users@cocoon.apache.org

Hello,

I am using a repeater with move-up and move-down row-action buttons.

Adding, deleting, and modifying works perfectly. move-up and move-down do 
not work.

Can anyone help me track the problem down?

Note: The "componentes" empty element is filled with "persona" elements by 
another form. The other elements on the empty "grupo" template are mapped to 
the fields I removed for simplicity.

Thank you very much.

-- 
Antonio


-------------------
definition:
<fd:form xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" xmlns:xi=" 
http://www.w3.org/2001/XInclude" <http://www.w3.org/2001/XInclude%22>>

<fd:widgets>
<fd:repeater id="grupos">
<fd:widgets>
<fd:output id="id">
<fd:datatype base="long" />
</fd:output>
<fd:field id="nombre" required="true">
<fd:label>Nombre</fd:label>
<fd:datatype base="string"/>
<fd:validation>
<fd:length min="2" />
</fd:validation>
</fd:field>
<!-- Several other fields -->
<fd:booleanfield id="select">
<fd:label>Sel.</fd:label>
</fd:booleanfield>
<fd:row-action id="subir" action-command="move-up">
<fd:label>Subir</fd:label>
</fd:row-action>
<fd:row-action id="bajar" action-command="move-down">
<fd:label>Bajar</fd:label>
</fd:row-action>

</fd:widgets>
</fd:repeater>
<fd:repeater-action id="addgrupo" action-command="add-row" 
repeater="grupos">
<fd:label>Añadir grupo</fd:label>
</fd:repeater-action>
<fd:repeater-action id="delgrupo" action-command="delete-rows" 
repeater="grupos" select="select">
<fd:label>Eliminar grupos seleccionadas</fd:label>
</fd:repeater-action>
</fd:widgets>
</fd:form>

-------------------------
binding:
<fb:context
xmlns:fb="http://apache.org/cocoon/forms/1.0#binding"
xmlns:fd="http://apache.org/cocoon/forms/1.0#definition"
path="/" >

<fb:repeater id="grupos"
parent-path="grupos"
row-path="grupo">

<fb:identity>
<fb:value id="id" path="@id">
<fd:convertor datatype="long" />
</fb:value>
</fb:identity>

<fb:on-bind>
<fb:value id="id" path="@id" direction="load">
<fd:convertor datatype="long" />
</fb:value>
<fb:javascript id="id" path="@id" direction="save">
<fb:save-form>
var formValue = widget.getValue();
if(formValue > 0) {
jxpathPointer.setValue(formValue);
} else {
jxpathPointer.setValue(new Packages.java.lang.Long(
Packages.java.lang.System.currentTimeMillis()).toString());
Packages.java.lang.Thread.sleep(5); // Garantiza que 
System.currentTimeMillis() sea único.
}
</fb:save-form>
</fb:javascript>
<fb:value id="nombre" path="datos/nombre" />
<!-- Other fb:value for other fields -->
</fb:on-bind>

<fb:on-delete-row>
<fb:delete-node />
</fb:on-delete-row>
<fb:on-insert-row>
<fb:insert-node>
<grupo id="">
<datos>
<nombre/>
<tipo/>
<padre id=""/>
<descripcion/>
<plantas/>
<extension/>
<telefonoDirecto/>
<fax/>
</datos>
<componentes/>
</grupo>
</fb:insert-node>
</fb:on-insert-row>
</fb:repeater>
</fb:context>


----------------
flow:
function grupos(form) {
var datos = leerDatos("xml/forms/datos/grupos.xml");

form.load(datos);
form.showForm("grupos-form-display-pipeline");
form.save(datos);

grabarDatos("xml/forms/datos/grupos.xml", "xml/forms/datos/grupos.xml.tmp", 
datos);
cocoon.sendPage("grupos-form-success-pipeline");
}

grabarDatos is a function streaming the XML to a tmp file and then moving it 
on success to the real file.
leerDatos reads the XML file into a DOM.




-- 
Antonio