[ http://issues.apache.org/jira/browse/MYFACES-1313?page=comments#action_12420122 ]
Mike Kienenberger commented on MYFACES-1313: -------------------------------------------- Try using t:dataTable with preserveRowStates=true and see if that works. JSF RI 1.2 handles nested UIData components by always preserving the row state. > 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
