Dear all,

I know this has been discussed before, but some issues
are still troubling me...

I’ve been experimenting with different methods for
handling exceptions in managed beans. The way I see
it, handling exceptions can be performed in the
following ways:


(A). Handling the exception internally, creating the
appropriate FacesMessages and / or forwarding to the
appropriate error page using the Navigation Handler.
This solution is obviously applicable only for
exceptions thrown in action methods and action
listeners.

(B). Wrapping the exception in a FacesException and
then re-throwing it. Doing so will cause the web
container (e.g. tomcat) to display the error page
configured in your web.xml. This is a fine solution
(for me at least!) for exceptions thrown elsewhere in
managed beans (e.g. in constructors that perform
initialization logic). However I discovered a slight
hitch: Internet Explorer has an "advanced" option
called "Show friendly HTTP error messages" enabled by
default, which will cause the Microsoft error page to
be displayed instead of the one configured in your
web.xml! This doesn’t seem to be an issue with Firefox
though...

(C).Catching the exception, and then explicitly
redirecting to some error page using
externalContext.redirect("...");
facesContext.responseComplete();  Again, this will
have more or less the same effect as the previous
solution, but this time avoiding the annoying IE
"feature".

I have tested all of the above solutions in a simple
MyFaces (ver. 1.1) application, and they all work
nicely. Turning to my real-world application, I am
currently using solution (a) (for my action methods
and listeners) but would also very much like to use
(c) as well (for everything else). However, I am also
using TilesServlet (from struts 1.1), and when tiles
are put in the picture bizarre things start to happen:

(Note the following applies only for exceptions thrown
anywhere in the bean BUT in action methods/listeners)

1) Using solution (c) will cause the page that was
originally requested to be displayed (possibly
incomplete), but the redirect call is definitely being
ignored (!). 

2) Using solution (b) will produce a white page with a
single line printed: 

[ServletException in:/WEB-INF/tiles/layout.jsp] Cannot
get value for expression
'#{someBean.someRandomProperty}''. 

The exception seems to be "consumed" at some unknown
point and never "bubbles up" to the web container
(although it is still printed in the application
context log). I also tried catching the exception by
setting up an http filter, but again without success
(again no exception is caught by the filter).

Since there are a lot of people using MyFaces and
Tiles together someone must have dealt with this
before. If anyone can help out, I would greatly
appreciate it. I will provide code samples if
necessary.

If you are still reading, thank you for your patience!

Mario



                
___________________________________________________________ 
How much free photo storage do you get? Store your holiday 
snaps for FREE with Yahoo! Photos http://uk.photos.yahoo.com

Reply via email to