We are moving to the web platform from a rich client server environment, and are starting to look at some of the issues involved. We are primarily looking at using JSF, Spring and Hibernate, but are encountering problems solving the following issues :
1) Maintaining entered data over a multiple page wizard.
2) Handling multiple simultaneous browser windows (i.e. editing 2 people at once)
3a) In mid flow of the multi page wizard, having to go to a seperate page to search for a person or a product, and come back to the wizard where you left off (with data intact).
3b) From the separate page, selecting a value and passing it back to the original page.
The first problem can be resolved by using a session scoped backing bean, but that causes problems with the second problem since multiple pages will use the same backing bean.
The third problem relates to a common search page (to be used to select a searched item) which would then return to a particular page, and pass back the data. Obviously, we would like to avoid session beans where possibly, although conversational beans which are temporary session beans are acceptable (hey, it has to go somewhere).
Our use case is that the user starts entering data on an object, they enter the first page of data, click next, go to the next page where they need to select a person, for which they need to go find the person using a separate search page. Once they find the product, they come back to page 2 of the wizard with the original data still intact and the person value populated, they then continue with the wizard.
Regarding navigation, I'm thinking that there might be some way to pass a return point to the search page so that it dynamically knows where to go back to once complete.
The problem with JSF navigation is that it doesn't allow for context for common forms. A search page could return to any page depending on where it was called from.
While Seam does indeed meet most if not all of these demands, we still like the lightness of JSF & Spring, especially since unit testing is so much easier to implement as it does not involve having a container for it to run in.
Our theory is that the easier unit testing is, the more likely it will be done thoroughly.
Additionally, Seam still has an involved configuration setup. We have looked at Spring Web Flow, but find it didn't play with JSF too well.
I guess my biggest question is how is this done 'normally'? I'm sure there are plenty of apps that are out there that don't use frameworks supporting conversations, and provide a way to have data across multiple pages and be able to jump to another page arbitrarily and come to back to where the user left off without having the servers crash under the weight of the massive sessions.