[ http://issues.apache.org/jira/browse/MYFACES-228?page=all ]
Mathias Broekelmann updated MYFACES-228:
----------------------------------------
Attachment: fixed_sortheader.diff
The patch should solve the bug.
> 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
> Attachments: fixed_sortheader.diff
>
> 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