The biggest problem that I have with Seam (and it is a HUGE problem), is that it is useless for the bookmark (direct-URL) loading problem.
Take for example the booking example provided. If you navigate to the following URL:
You will see that there is a "Welcome" and a "Logout", but you will not have logged in yet!
Without writing a ton of workaround code, I cannot see how to fix this problem. When a user accesses a page that pulls data from beans with interceptors, those interceptors should be run, despite the fact that there is no active JSF action being excuted.
In the booking example, if you access a page that is restricted, it should not bring up the page with no data, it should bring up the login page. Every page in the example has this problem. If you go to the URL of a page directly, the page always loads, but with no data.
In real world web sites, people accessing sites directly using a URL happens all the time (email a link to a given product to a friend for example, or bookmark a product that you may want to buy).
This is partially a JSF shortcomming but one that greatly affects the Seam infrastructure, because the annotations of beans demarcated with interceptors and "If not begin" are ignored on page load, they are only taken into account for post-back.
Until this issue is addressed, I don't know how it is possible to write production code using Seam.
Has anyone addressed this issue?
This has been discussed here several times.
The solution is:
This will no longer be needed in the next release (the default for @Intercept was changed).
Also check out the @Factory annotation in CVS.