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