Hi<br><br>I attached a patch with better documentation for TransientStateHelper -<br>TransientStateHolder and the answers requested. If you need anything<br>else just let me know and I&#39;ll do it.<br><br> I resume the comments below:<br>
<br>EB&gt; Leonardo, why is the preceding state traversal saved into <br>EB&gt; this funky two element array, whereas the next one, described <br>EB&gt; below, saved into the normal Map?<br><br>It is necessary to save the &quot;initial rolled up state&quot; in a way that the <br>
state could be restored without depend of  the row where the <br>component or the model is, so an implementation option could<br>be use an array like structure, so traversing it could restore the state.<br>Since the row index is attached to the client id of child components, <br>
use a Map in this case will work on simple datatables but will not work<br>on nested datatables correctly.<br><br>EB&gt;Traverse the children as done with markInitialState, saving the <br>EB&gt;state of each child.  Because the saveState calls during this pass <br>
EB&gt;happen after the call to markInitialState, the state saved is the <br>EB&gt;so called &quot;delta&quot; state of each component. Because this <br>EB&gt;traversal happens during a per-row operation (in this case, <br>
EB&gt;setRowIndex) the rolled up state must be saved in a row-aware <br>EB&gt;data structure.  One implementation choice would be to save <br>EB&gt;the state from this pass in a Map keyed by the return from <br>EB&gt;javax.faces.component.UIComponent#getContainerClientId.<br>
<br>The algorithm uses as key is call child.getClientId() that calls <br>UIData.getContainerClientId() later, but other alternative could be <br>use child.getClientId() but trim the value from <br>UIData.getContainerClientId(). That makes easier fix the <br>
problem when a row is deleted.<br><br>EB&gt; Why do we need to bother passing null to<br>EB&gt; restoreTransientState()?  There must be a good reason, but I need<br>EB&gt; to include it in the specification.&lt;/p&gt;<br>
<br>It is necessary to pass null to restoreTransientState()<br>to indicate the transient state should discarded from the previous one,<br>otherwise the transient state could be shared between rows.<br><br><br><br>To include the patch in jsf 2.1, we need to resolve the following point left:<br>
<br>- On UIData.markInitialState do not use a facesContext attribute <br>&quot;com.sun.faces.MARK_INITIAL_STATE&quot;, instead it could be better to use<br>a variable on FacesContext to indicate when we are marking the initial state,<br>
like FacesContext.isProcessingEvents() works.<br><br>It could be event better to add flags to indicate when the current view is being<br>built using pss and when the view is being refreshed. It comes in handy in some<br>situations, but that&#39;s another issue (and I&#39;m not found yet strong arguments to <br>
support this more than myfaces PSS solution uses it in multiple places).<br><br>best regards,<br><br>Leonardo<br><br><div class="gmail_quote">2010/8/26 Martin Marinschek <span dir="ltr">&lt;<a href="mailto:mmarinschek@apache.org">mmarinschek@apache.org</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Hi all,<br>
<br>
thanks to Ed and Leonardo for this discussion - I really believe this<br>
is a positive example how any spec work should go ;)<br>
<br>
@Leonardo: if you need help with the wording, just ping me.<br>
<br>
@everyone else who is interested in this: please can you also invest<br>
some work to review this? this is really a delicate issue, and might<br>
change quite a lot of the UIData behaviour, so it makes sense you<br>
invest the time.<br>
<br>
best regards,<br>
<font color="#888888"><br>
Martin<br>
</font><div><div></div><div class="h5"><br>
On 8/26/10, Ed Burns &lt;<a href="mailto:edward.burns@oracle.com">edward.burns@oracle.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt; On Wed, 25 Aug 2010 20:12:59 -0500, Leonardo Uribe &lt;<a href="mailto:lu4242@gmail.com">lu4242@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; said:<br>
&gt;<br>
&gt; LU&gt; The problem with allow it with a context-param is there is no way to<br>
&gt; LU&gt; &quot;reset&quot; the deltas or remove rows to synchronize the model with the<br>
&gt; LU&gt; component state.<br>
&gt;<br>
&gt; LU&gt; Suppose a simple use case, where there is a datatable and an option<br>
&gt; LU&gt; that removes one row. Since we don&#39;t have a way to notify the<br>
&gt; LU&gt; component that the row has been removed the state of the deleted row<br>
&gt; LU&gt; will be applied on the next one.<br>
&gt;<br>
&gt; Ok, I see.<br>
&gt;<br>
&gt; Now, when I discussed with the expert community at a recent meeting the<br>
&gt; process for accepting new features for 2.1, I tried to be as clear as<br>
&gt; possible that we&#39;d need the contributing party to do *all* of the work.<br>
&gt; Leorando, you&#39;ve done the code, and it&#39;s great, but the spec language is<br>
&gt; even more important since this body, technically, is partially<br>
&gt; responsible for the spec.  Oracle, as the sponsor, is solely responsible<br>
&gt; for the impl.  Now, as I said, I&#39;m delighted with your contribution of<br>
&gt; an implementation for this feature, but I need you to author as much as<br>
&gt; possible of the spec text.<br>
&gt;<br>
&gt; I&#39;ve started by documenting the preserveRowComponentState property in<br>
&gt; the UIData.setPreserveRowComponentState() method.<br>
&gt;<br>
&gt; Please take a look at the javadoc I&#39;ve generated in this attachment [1]<br>
&gt; to issue 153 [2].  I&#39;ve posed some questions in there, you can anwser<br>
&gt; them here.  Also, please correct my where I&#39;ve gone wrong.<br>
&gt;<br>
&gt; If you could submit a text file with sketches of the javadoc for other<br>
&gt; elements of this feature, for example, the new TransientStateHelper<br>
&gt; interface, it would really increase the likelihood of this feature<br>
&gt; making it into 2.1.<br>
&gt;<br>
&gt; [1]<br>
&gt; <a href="https://javaserverfaces-spec-public.dev.java.net/nonav/issues/showattachment.cgi/271/153-javadocs.zip" target="_blank">https://javaserverfaces-spec-public.dev.java.net/nonav/issues/showattachment.cgi/271/153-javadocs.zip</a><br>

&gt;<br>
&gt; [2]<br>
&gt; <a href="https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=153" target="_blank">https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=153</a><br>
&gt;<br>
&gt; --<br>
&gt; | <a href="mailto:edward.burns@oracle.com">edward.burns@oracle.com</a> | office: +1 407 458 0017<br>
&gt; | homepage:               | <a href="http://ridingthecrest.com/" target="_blank">http://ridingthecrest.com/</a><br>
&gt; | 12 work days until JSF 2.1 Milestone 3<br>
&gt;<br>
<br>
<br>
</div></div><div><div></div><div class="h5">--<br>
<br>
<a href="http://www.irian.at" target="_blank">http://www.irian.at</a><br>
<br>
Your JSF powerhouse -<br>
JSF Consulting, Development and<br>
Courses in English and German<br>
<br>
Professional Support for Apache MyFaces<br>
</div></div></blockquote></div><br>