The UIViewRoot unique id must be persisted to guarantee that no matter the 
state saving lifecycle of the component tree, that the UIViewRoot can always 
produce a unique ID, despite changes to the structure of the view at 'build 
time'.

I understand what you are going for with Verbatims and unique ids-- but it 
requires repeatable order of evaluation.  One or two if-statements could throw 
the whole order of comparison off.  This is a major problem with sequence 
comparisons and accomodating document change.

With JSP 2.1, we have JspIdConsumers which, by contract, assert that each 
JspTag will be assigned a unique id.  This can be used instead in comparison 
since it's not order of evaluation dependent.

With Facelets, we don't bother asserting uniqueness by Id for 
cleanup/transients and instead implement our own JspIdConsumer with an 
assignment to the AttributeMap.  That value is instead used to determine 
duplication/cleanup, indifferent of the id assignments that the user or JSF 
impl provides.  So instead of using the API's findComponent, we use a 
findComponent by Facelet Token ID.

 
>From: [EMAIL PROTECTED] 
>
>Declaring subviews and ajax regions is only a partial solution-- when JSF in 
>fact 
>should be able to re-render any component without being explicitly declared as 
>a 
>refreshable region (that's what we were pushing out of Facelets and JSF 1.2).  
>Ajax4Jsf does this by decoration of existing, non-ajax components and the JSF 
>1.2 invokeOnComponent (Martin, et. al) can do it for any component without 
>decoration in a very, very efficient manner.
 
I have a related question that I'm sure you guys can help me understand.  It 
has more 
to do with restoring the view and then recreating the components that are 
marked as 
transient.  I think you would have similar issues with partial page rendering.
 
There was a recent change in the myfaces UIViewRoot.  The change was related 
to the createUniqueId method.  This component now persists the last generated 
id.  
>From what I understand, JSF RI 1.2 behaves the same.


 
What I'm unsure about is how to insert a new component (verbatim) into a 
restored tree.  
What is the best way to calculate an id that won't collide.  It also requires a 
different method 
of inspecting the restored tree to see if a component needs to be recreated 
using the 
findComponent method.
 
For a temporary solution with Clay, I create my own sequence that is reset each 
time the 
view is rendered and passed around in request scope.  This new sequence doesn't 
use 
the UIViewRoot's method of generating a sequence but it seems to work.
 
It appears that the myfaces JSP tags are doing a similar thing.  The generated 
component 
id's don't appear to be generated using the UIViewRoot.
 
Any insight would be appreciated.

Gary

Reply via email to