Seam 1.2.1-GA, seam-gen derived infrastructure (Home classes, etc.)
My recent discovery of the need to use MANUAL flushing on a certain page has gotten me to pay more attention to conversational lifespan than I had in earlier phases of our app's development. I am now worried about the following use case / bug which I can easily produce in my app (NOTE: this is on a page that is not using MANUAL flushing - it's orthogonal to the flush-mode):
User selects "Edit Widget" which instantiates a new instance of WidgetHome and loads Widget #1 into its getInstance(). page.xml for this page sets up the conversation:
As long as the user ends his interaction with the form in one of the "expected" ways (Save, Remove, Cancel), he will trigger a corresponding
<end-conversation>specified either in the navigation rules in page.xml, or via a propagation="end" in the xhtml.
However: what happens if the user exits the form by some other means (e.g. a link off the global menu.xhtml, a bookmarked link, etc.). The conversation will not end. Let's say that menu link gets him back to the page where he can click "Create Widget". Normally, this would create a new WidgetHome and a brand spanking fresh createInstance() call would create a new Widget instance. But since I'm still in the old conversation, I end up reusing the old WidgetHome from the "improperly" exited form page -- and my "Create Widget" screen is populated with the Widget #1 I was visiting before I so rudely left the page with a Menu link instead of a Cancel.
I can't find any provision in the Seam navigation model for blanket ending a conversation. For the global navigation menu, perhaps I could add propogate="end" to all the s:link's (I'd have to think that through - I'm not sure I'd _always_ want to do that). but that doesn't help with other cases (a bookmarked link, the user typing a URL into the address bar, etc.).