Jeremy Quinn wrote:
On 25 Nov 2003, at 23:18, Sylvain Wallez wrote:
Bruno Dumon wrote:
On Tue, 2003-11-25 at 13:47, Jeremy Quinn wrote:
Hi All,
I am struggling with persisting re-arranged repeater rows.
I have a form that edits an Album Bean which has a (java.util.List) 'Resources' Property which is populated by Resource Beans.
I have the List of Resource Beans represented in the form as a repeater-widget, with move-up, move-down buttons.
When I click one of the up/down buttons, the repeater-rows get re-arranged correctly in the form.
When I save the Album (I am using Hibernate, with cascading) the change in the ordering is not persisted.
I am clearly missing something ..... has anyone else had with a similar issue?
Any suggestions?
No need to look further: AFAIK the binding currently doesn't sync order, it only checks for new or removed rows. So it considers the list to which the repeater binds to be an unordered set.
I personally use only the simple-repeater binding, because the full content of the collection is in the rows (no other non-displayed field). And the simple-repeater binding starts by erasing the collection before recreating it from scratch, and in order.
I had this :
<wb:repeater id="resources" parent-path="." row-path="resources" unique-row-id="id" unique-path="id">
<wb:on-bind> <wb:value id="id" path="id"/> <wb:value id="text" path="text"/> <wb:value id="reference" path="reference"/> </wb:on-bind> </wb:repeater>
But as Bruno said, it won't work with re-arranging because the Resources List is treated as a Set.
So I tried this:
<wb:simple-repeater id="resources" parent-path="." row-path="resources" />
but I get no data is in the form, even though I have the correct number of repeats.
hm, looks like this is missing the explicit binding sub-xpaths for the sub-widgets?
so I tried this:
<wb:simple-repeater id="resources" parent-path="." row-path="resources" > <wb:on-bind> <wb:value id="id" path="id"/> <wb:value id="text" path="text"/> <wb:value id="reference" path="reference"/> </wb:on-bind> </wb:simple-repeater>
but Cocoon complains thus :
org.apache.cocoon.woody.binding.BindingException: Cannot handle binding element with name "on-bind".
Any suggestions?
I think the simple-repeater is not supporting the nested on-bind (yet), try removing the on-bind wrapper and have just:
<wb:simple-repeater id="resources" parent-path="." row-path="resources" > <wb:value id="id" path="id"/> <wb:value id="text" path="text"/> <wb:value id="reference" path="reference"/> </wb:simple-repeater>
please let us know if this fills your repeater-rows corretly
hm, as for the remark on the 'XML only' support I guess this has to do with the missing object-factory for the on-insert-row event?
(IIRC Sylvain made some generic XML oriented factory which helas can not be used for Java object backends)
This sounds like simple-repeater should get some more features from his more complex brother, no?
suggestion:
introduce on-bind wrapping of the children, so we can introduce a
on-create-row that behaves just like the on-insert-row and allows to specify the classname of a jxpath-factory?
wdyt?
thanks
regards Jeremy
Jeremy,
Just for my interest: if I get it correctly, then the order of some records seems to be of importance for you app?
Mapping this to a database would mean that those records have a sequence-number-field, correct? I'm not completely into hibernate, but from your story I get the impression that you can tell the hibernate-mapping that that sequence-number needs to be used as the index-number into the list? (groovy stuff!)
regards, -marc= -- Marc Portier http://outerthought.org/ Outerthought - Open Source, Java & XML Competence Support Center Read my weblog at http://radio.weblogs.com/0116284/ [EMAIL PROTECTED] [EMAIL PROTECTED]