Nested Table - odd behavior when calling setRowIndex 
-----------------------------------------------------

         Key: MYFACES-1313
         URL: http://issues.apache.org/jira/browse/MYFACES-1313
     Project: MyFaces Core
        Type: Bug

    Reporter: Gina Marksteiner


I have tables nested 3 levels deep and when the user clicks an Update button I 
need to get the value of a selectBooleanCheckbox that is contained in the inner 
most table.  I have a recursive method which calls setRowIndex on the UIData - 
it loops through the root table rows, and for each row in that table, calls the 
method to loop through the second level table rows, etc.  So, the root table 
index gets set to 0, and it then loops through the 2nd level table rows, sets 
the index to 0, and then loops through the innermost table rows, checking the 
value of the check box.  I called getAttributes().get("value") on the UIData to 
get the list of rows.  When the checkbox is checked, I need to remove the row, 
so I call list.remove(row) to do so.  I then used setValue on UIData to set the 
value to the new list, after removing the row. 

I have seen some strange behavior, so I'm wondering if this programatic setting 
of rows is an ok approach.  The reason I'm using it is because the application 
is a generic one that supports plugging in new data types, which use the same 
type of page for the user to add/delete child objects for the data type.  

The strange behavior I have seen is:
 1. The getValue method on the check box - it often returns false, even when it 
is checked.  It always seems to return the correct value for the rows in the 
first row of the second level table (outermost table index set to 0, second 
level table index set to zero), but returns false for the first row for all 
other row values in the second level table (outermost table index set to 0, 
second level table index set to anything greater than 0).  My outer most table 
only has 1 entry at the moment, so I don't know what would happen if this had 
more rows.
2. When I remove a row and then call setValue(newListWithRowRemoved), it seems 
that this list becomes the value for all row indexes of the second level table. 
 For example, I set the index of the outer most table to zero, set the index of 
the second level table to 0, and then loop through the rows in the inner most 
table.  I see that the checkbox is checked for row 1, I remove the row, and 
call setValue on the UIData for the inner most table.  I then continue looping 
through, setting the index of the second level table to 1, and checking all the 
rows in the inner most table.  The rows of the inner most table will now have 
the values from when the second level table had it's index set to 0, even 
though the second level table now has its index set to 1.


-- 
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

Reply via email to