I am building a mini-framework using Seam to allow our developers to build search and detail pages easily. Screen page is basically search parameters + grid and the detail is just input fields with OK/Cancel. The important thing is the basis of the Search and Detail components be reusable.
Sometimes input fields on a detail view need to be links/buttons through to another search page where an entity is selected and a relationship is established (many-to-one).
I'm trying to figure out how to do the conversation handling and state management/passing between the pages/components. I have this page flow the user will follow.
Entity A Search -> Entity A Detail -> Entity B Search -> Back to Entity A Detail (after selection) -> Back to Entity A Search (after OK/Cancel)
And I need to pass to the selection from the Entity B Search back to the Entity A detail for population of one of the input fields.
So far I have thought of the following.
Entity A Search component has a conversation for storing the search state (pagination, current selection etc). This conversation should never be propogated to other views (maybe this should be page scope but I use s:link which precludes this I think).
On selecting to Edit an entity redirect to the detail view (propogation=none).
Entity A Detail component starts a new conversation.
On selecting the button to the Entity B search redirect and propogate the conversation to the search view.
Entity B Search starts a nested conversation. User selects.
Now I'm not sure how to pass the selected row(s) back from search B to detail A. Maybe just have a conversational component that the detail A creates and B writes it's selection to? Then when the nested conversation is popped the selected values will still be held in the parent conversation. I plan on using "Conversation.endAndRedirect()" to get back to detail A from search B.
An additional problem is how to resume the search A conversation when detail A is done. Should I just pass the conversation id as a parameter and have detail A switch to it when it completes?
Many thanks if you even read this far!
Any suggestions/critiquing welcome.