Hi all,

I am trying to set a persistent value of a field in my application on a XHR
request. I am using tynamo's tapestry-conversation and I want to copy the
old conversation's values to the new conversation. I am iterating through
each field in the old conversation and setting the value for the new
conversation like so:

   > Session session = request.getSession(false);
   > for (String name : session.getAttributeNames(oldConversationPrefix))
   >    session.setAttribute(name.replace(oldConversationPrefix,
newConversationPrefix), session.getAttribute(name)

However once the XHR request completes the changes aren't shown in the
render. If I update the XHR again after this has been done with another
request (i.e click on something on the page) then the values are actually
updated and I see what I expect.

I looked into why this is happening and it seems like whenever a field is
accessed it goes into the PerthreadMap for the specific field and grabs the
value that was generated when the page was first rendered. Since it only
does it at the start of the render any changes to the field don't seem to
be reflected until the next render.

I've tried:
  * Setting the field using reflection
  * Using InternalComponentResourcesImpl.persistFieldChange
  * Trying to find a way to run the conduit_get_[fieldname] method to
modify the PersistentFieldConduit value, but I couldn't figure this out

Any help would be appreciated... this has stumped me! I'm sure I'm just
doing something wrong and I've been missing something that's obvious.

Thanks,
David

Reply via email to