detailStamp facet in the last row not decoded/validated/updated
---------------------------------------------------------------

         Key: TOMAHAWK-493
         URL: http://issues.apache.org/jira/browse/TOMAHAWK-493
     Project: MyFaces Tomahawk
        Type: Bug

    Versions: 1.1.2    
    Reporter: Val Blant


There is a problem with the state saving algorithm in 
org.apache.myfaces.component.html.ext.HtmlDataTable. setRowIndex(int) method 
saves the state of the component in the context of the previous index and then 
retrieves the appropriate state for the component in the context of the current 
index. This ensures that components will have appropriate values for each row 
before doing the work for any given phase. 

The problem is that this algorithm will never store the state of the very last 
row on the current page. This can be easily verified if you put some input 
fields into the detailStamp facet, expand the last row on the page, update a 
value and do something to cause a postback. The values in the facet will revert 
back to what they were before and the model will not be updated.

The fix to this is simple:
In processDetails() method, after this line: 
"process(context,facet,processAction);" put:
                    if ( rowIndex == (last - 1) ) {
                        Set set = new HashSet();
                        set.add(facet);
                        hidableRowStates.put(
                                        
getClientId(FacesContext.getCurrentInstance()),
                                        
saveDescendantComponentStates(set.iterator(),false));
                    }

This if-statement defines the special case that stores the state of the facet 
in the last row on the page.

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