-
1. Re: Passing data between nested conversations
denis-karpov Aug 9, 2007 3:56 AM (in response to jfbenck)From the nested conversation you have access to the parent conversation scope. You can't add or remove from the parent scope, but you can get a reference to an any object and you can change the state of this object.
Next thing you can do. You can pass parameters when you start nested conversation.
For instance, to choose link object I use nested conversation (old one, because I use 1.2.1 version)
In this way I start nested conversation<a4j:commandLink value="#{messages['com.colvir.common.choose']}" action="#{refer.begin}" propagation="nest"> <a4j:actionparam name="ref" value="#{refName}" assignTo="#{refer.refName}"/> <a4j:actionparam name="caption" value="#{caption}" assignTo="#{refer.caption}"/> <a4j:actionparam name="binding" value="#{binding}" assignTo="#{refer.binding}"/> <a4j:actionparam name="viewid" value="#{viewid}" assignTo="#{refer.viewid}"/> </a4j:commandLink>
In this way I return from nested to parentpublic String select() { if (binding==null){ throw new RuntimeException("Binding in reference can't be null"); } Query r = getRef(); if ( r==null ){ throw new RuntimeException("Reference query can't be null"); } Object o = r.getDataModel().getRowData(); // End conversation and redirect to parent Conversation.instance().endAndRedirect(true); // Returning selected value Expressions.instance().createValueBinding("#{"+binding+"}").setValue(o); return null; } public String cancel() { Conversation.instance().endAndRedirect(true); return null; }
Actually, with composite pageflows everything has to be much simpler.
Denis. -
2. Re: Passing data between nested conversations
jfbenck Aug 9, 2007 4:12 AM (in response to jfbenck)Hi Denis,
Thanks for your reply. The option to retrieve the data from the parent scope was clear to me, however the question is how to add this object to the parent scope? Outjection is probably an option, however: is there a risk of naming-clashes between the different objects, is the code and resulting behaviour clear to other developers, how is the name for the result object defined? I'm thus inquiring for some best practices and potential pit falls.
Passing data to the child scope is indeed not much of a problem using e.g. the mentioned parameters or just performing calls on the object directly.
Jeroen -
3. Re: Passing data between nested conversations
denis-karpov Aug 9, 2007 5:31 AM (in response to jfbenck)the question is how to add this object to the parent scope?
It is the bad practice, to try to do this. Even if you hack this, Gavin will probably close this door in the next release ;-)
Why not to make a special container that hold the shared state?
And put this container to the parent context. Then you can change the state of this container from any nested conversation. Is it not enough? -
4. Re: Passing data between nested conversations
jfbenck Aug 9, 2007 5:36 AM (in response to jfbenck)That was what I meant (sorry for the bad explanation, looks confusing after re-reading it)
So from the parent bean I outject a container (simple POJO) into the context under a specified name and refer (inject) to this object from the child context.