[ http://issues.apache.org/jira/browse/MYFACES-228?page=comments#action_12315446 ]
sean schofield commented on MYFACES-228: ---------------------------------------- I had a problem applying the patch but I applied manually and still experienced problems. Stacktraces are gone but now clicking on sortheader or data scroller does nothing. I checked the latest patch in so please make sure to do an update. > 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
