You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Rolf Kulemann (JIRA)" <my...@incubator.apache.org> on 2005/05/03 19:46:08 UTC
[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_64368 ]
Rolf Kulemann commented on MYFACES-228:
---------------------------------------
Sorry, I use JDK 1.4.2_06 and not 1.4.1 :)
> 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
>
> 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