On Fri, 2006-01-13 at 17:22 -0500, Ryan Wynn wrote:
> Can anyone explain to me how a link inside extendedDataTable whose
> action is bound to a rowVar bean method gets executed?  I have a case
> where I invoke a method binding on the rowVar bean in the table.  When
> I click on the link the method is executed but not on the correct
> row/bean in the table.  My problem began where I started sorting the
> list return to data in the getData method.  I guess my sorting of the
> list is not being propogated to the list data model.  The rows appear
> in the order that is expected.  It is just invoking the link on the
> correct bean in the unwind process that is not working.  I am using
> myfaces 1.1.1.  Other things to note, the link isImmediate is true (I
> also tried false) and FacesContext.renderResponse is called first in
> the invoked method.  The invoked method also returns null because I
> want to stay on the same view.

There is a hidden field in each form that is used to store the id of the
command component that caused the form to be submitted.

Each command component (commandLink, commandButton, etc) has javascript
attached to it which sets this hidden field to the command component's
id before performing the submit.

In the case of a commandLink in a table, the javascript rendered for
each row will set this hidden field to a slightly different value (ie
indicating the row).

After a submit occurs, the table does:
for each row: 
  set row index
  call decode for each child component

Therefore on each row the commandLink component looks for its id in the
hidden field - but this is only found when table rowIndex matches the
one that the user clicked on. When this occurs, the commandLink
component queues an event for later processing; this is intercepted by
the UIData component which wraps it in a custom event class that knows
about the current row.

When the event is executed, the custom event class ensures the UIData's
rowIndex is set to the appropriate row for the event before the
ActionListeners attached to the commandLink component are run. Result:
the code run by the ActionListeners can look at the parent table, and
see its rowIndex and rowData objects are set to the appropriate values
for the row containing the link that was clicked on.

All this *does work*; I use it - and with sorting enabled too.

Perhaps you're correctly sorting at the render phase, but are returning
the data in a different order during the "decode" phase?

Regards,

Simon

Reply via email to