Hi Sean, Have you tried my latest patch for htmldatatable? It should work with a sortheader and immediate="false"
Mathias > -----Original Message----- > From: sean schofield (JIRA) [mailto:[EMAIL PROTECTED] > Sent: Thursday, July 07, 2005 5:26 PM > To: [email protected] > Subject: [jira] Commented: (MYFACES-228) Sortheader > functionality does not work if datatable contains editable components > > > [ > http://issues.apache.org/jira/browse/MYFACES-228?page=comments > #action_12315247 ] > > sean schofield commented on MYFACES-228: > ---------------------------------------- > > Latest patch has not improved things much as far as this > specific problem goes. If you use immediate="false" in the > sort header you still have a problem. > > > 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 > >
fixed_uidata.diff
Description: fixed_uidata.diff
