The javadocs of UIData.encodeBegin state:
=========
In addition to the default behavior, ensure that any saved per-row
state for our child input components is discarded unless it is needed
to rerender the current page with errors.
=========
It seems to me that the "with errors" part should be dropped.
Consider the case of a page with a UICommand where immediate="true"
and a UIData containing UIInput components.
In this case, the UIInputs will lose any submitted values when the
UICommand is triggered. This is the behavior I'm seeing with the
MyFaces implementation, and I don't see a way around it in the spec.
Can we change the spec to preserve the state whenever the UIInputs
have a submitted value or a local value still present? This seems
more useful than checking for an error message.
Taking a look at the latest JSF 1.2 RI source, I also see that the
state is also saved if the UIData is inside another UIData. The spec
docs should reflect this as well.
I'm going to try to be on ##jsf today if anyone would rather talk
about it there.