[ http://issues.apache.org/jira/browse/COCOON-1864?page=all ] Antonio Gallardo closed COCOON-1864: ------------------------------------
Fix Version: 2.2-dev (Current SVN) 2.1.10-dev (current SVN) Resolution: Fixed Thanks for your contribution. The patch applied. Feel free to reopen the issue if needed. > RepeaterJXPathBinding - order of row is inverted > ------------------------------------------------ > > Key: COCOON-1864 > URL: http://issues.apache.org/jira/browse/COCOON-1864 > Project: Cocoon > Type: Bug > Components: Blocks: Forms > Versions: 2.1.8, 2.1.9 > Reporter: DennisDam > Assignee: Antonio Gallardo > Fix For: 2.2-dev (Current SVN), 2.1.10-dev (current SVN) > > I found a bug in the forms block of Cocoon 2.1.8 / 2.1.9. I found that > putting a min-size / initial-size attribute on a repeater element in the > CForms model, inverts the order of rows upon binding the form. So for > example the input document looked like: > <document> > <row>a</row> > <row>b</row> > <row>c</row> > <row>d</row> > </document> > and my repeater model element's intial-size was set at 3. After > transforming the forms template with the forms transformer, I see the > following field instances (pseudocode): > <field>c</field> > <field>b</field> > <field>a</field> > <field>d</field> > So what happens? The JXPathbinding for the repeater inverts the order of > the elements with index < initial-size! I traced this bug back to the > org.apache.cocoon.forms.binding.RepeaterJXPathBinding class, where I > found the following code snippet in the doLoad() method: > while (rowPointers.hasNext()) { > // create a new row, take that as the frmModelSubContext > Repeater.RepeaterRow thisRow; > if (initialSize > 0) { > thisRow = repeater.getRow(--initialSize); > } else { > thisRow = repeater.addRow(); > } > I changed this into: > int currentRow = 0; > while (rowPointers.hasNext()) { > // create a new row, take that as the frmModelSubContext > Repeater.RepeaterRow thisRow; > if (currentRow < initialSize) { > thisRow = repeater.getRow(currentRow++); > } else { > thisRow = repeater.addRow(); > } > and now the binding works correctly / like I want it to work :). I must > note that I do NOT use an identity in my repeater binding declaration. > But I think it would be logical that leaving out the identity element > should result in preservation of the order the elements occur in the > input document. > regards, > Dennis Dam -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira