This is usually done by assigning a windowId for each tab/window and passing it on each request. Jsf supports this via orchestra. Spring mvc will support it in the next version.
I recently needed this for a simple case, so I implemented it myself. Took half an hour. However, my scope was very limited:
- pass a
windowId
with each request, and return it back for the next request. The first time – generate it. - for any attribute you want to store in the session, put a
Map<String, Object>
where the key is thewindowId