[ 
http://issues.apache.org/jira/browse/MYFACES-228?page=comments#action_12314277 
] 

Oliver Rossmueller commented on MYFACES-228:
--------------------------------------------

Rolf,

I just used the sorted datatable example from the examples webapp and embedded 
the data table within a form. Sorting worked for me with that setup and the (at 
that time) latest trunk.

> Sortheader functionality does not work if datatable contains editable 
> components
> --------------------------------------------------------------------------------
>
>          Key: MYFACES-228
>          URL: http://issues.apache.org/jira/browse/MYFACES-228
>      Project: MyFaces
>         Type: Bug
>     Versions: 1.0.9 beta
>  Environment: WindowsXP, JDK 1.4.1_06, Tomcat 5.5
>     Reporter: Rolf Kulemann
>     Assignee: sean schofield
>     Priority: Critical

>
> I'm using a dataTable with sortheader. Everything is fine as long as I
> use outputText instead of a inputText. If I use inputText, the
> List/array is sorted correct on the srever side when my value binding is 
> invkoked by the datatable, but the old model (unsorted) is displayed.
> I debuged that a bit and recognized, that as soon as I click any command 
> button, the sorted list gets displayed correctly. This is because refresh() 
> is called in the datatable when clicking a commandButton. Refresh isn't 
> called when u click on the sort header command. On the other hand using 
> outputText works fine. While looking at the HtmlDataTableHack class i found
>  private static int restoreDescendantComponentStates(UIComponent component,
>                                                         
> EditableValueHolderState[] states,
>                                                         
> EditableValueHolderState[] initialStates,
>                                                         int counter, int 
> level)
>     {
>         for (Iterator it=getChildrenAndOptionalFacetsIterator(level, 
> component); it.hasNext();)
>         {
>             UIComponent child = (UIComponent)it.next();
>             //clear this descendant's clientId:
>             child.setId(child.getId()); //HACK: This assumes that setId 
> always clears the cached clientId. Can we be sure?
>             if (child instanceof EditableValueHolder)
>             {
>                 if (states != null)
>                 {
>                     states[counter].restore((EditableValueHolder)child);
>                 }
>                 else if (initialStates != null)
>                 {
>                     
> initialStates[counter].restore((EditableValueHolder)child);
>                 }
>                 else
>                 {
>                     // No state saved yet and no initial state !?
>                     // Should never be possible, but let's reset the component
>                     // state to null values
>                     ((EditableValueHolder)child).setValue(null);
>                     ((EditableValueHolder)child).setLocalValueSet(false);
>                     ((EditableValueHolder)child).setValid(true);
>                     ((EditableValueHolder)child).setSubmittedValue(null);
>                 }
>                 counter++;
>             }
>             counter = restoreDescendantComponentStates(child, states, 
> initialStates, counter,level+1);
>         }
>         return counter;
>     }
> Not sure, but it seems that this codes cuases the old model state to be 
> rendered and not the newly sorted one. If I have time, I will track it down a 
> bit more.
> You can simply reproduce this by changing the sortTable example. You
> only need to change outputText into inputText.

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