so we do this:

protected Page onRuntimeException(final Page page, final RuntimeException e)
   {
       return null;
   }

protected final void internalOnRuntimeException(final Page page, final RuntimeException e)
           throws ServletException
   {
       // let client handle any specifics
       final Page redirectTo = onRuntimeException(page, e);

       log.error("Unexpected runtime exception [page = " + page + "]", e);

       e.printStackTrace();
       // Reset page for re-rendering after exception
       if (page != null)
       {
           page.resetMarkupStreams();
       }

       // If the page we failed to render is an error page
       if (page != null && page.isErrorPage())
       {
           // give up while we're ahead!
throw new ServletException("Internal Error: Could not render error page " + page, e);
       }
       else
       {
           if (redirectTo != null)
           {
               setResponsePage(redirectTo);
               redirectTo(redirectTo);
           }
           else
           {
               try
               {
                   redirectToExceptionErrorPage(page, e);
               }
               catch (RuntimeException e2)
               {
                   throw new ServletException(
"Internal Error: Could not redirect to exception error page. Was trying to display exception for page " + page + ":\n" + Strings.toString(e), e2);
               }
           }
       }
   }


Phil Kulak wrote:

Yea, but a stack trace is always printed after that method is called.

On 8/11/05, Igor Vaynberg <[EMAIL PROTECTED]> wrote:
There is already a RequestCycle.onRuntimeException(final Page page, final
RuntimeException e) where you can handle exceptions globally. Why introduce
extra complexity?

-Igor


-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf
Of Jonathan Locke
Sent: Thursday, August 11, 2005 4:45 PM
To: [email protected]
Subject: Re: [Wicket-develop] Let's talk about exceptions.


all we'd have to do to allow you to handle exceptions
globally is make this method protected and non-final:

   private final void redirectToExceptionErrorPage(final
Page page, final RuntimeException e) throws ServletException

that's the location that all exceptions are funneled through.
it has the page and the exception.
you'd just subclass requestcycle as you probably are already doing.

we could easily add an Application method to make this easier
to hook this /if it's really a common thing people want to do
for their application/.  we'd add

Application.onRuntimeException(Page page, RuntimeException e)

and call that from redirectToExceptionErrorPage().  right?

Michael Jouravlev wrote:

On 8/11/05, Phil Kulak <[EMAIL PROTECTED]> wrote:


I didn't get much input on this when I was commenting in another's
thread, so I thought I'd start a whole topic on it. Anyway, is it
planned to give the developer some way to get at thrown
exceptions in
a central place and handle them? I keep coming on situations when I
need to do this, and I have no idea how to go about it.

Some examples. You've got a shopping cart and a checkout
process. You
don't want the user to be able to start the checkout
process with an
empty cart. My first instinct is to check for an empty cart on
construction and throw a custom exception if the cart's empty, but
since I can't get to it further up the stack, that doesn't get me
anywhere.


I don't see how this is different from validating a form.
How exactly a
user would get to checkout? Either with button or link. Link
should not
be a page link, it should be what JSF calls "command link".
Basically, it is the same submit action on a page, but via
link. Ok, it
is not a submit, but it still should call event handler on a current
page. So, you can check for empty cart, generate error message and
redirect to same page.



Or how about if I user tries to view a bookmarked page for
an object
that doesn't exist anymore? You can't draw the page without
an object
to draw from, so you throw an exception. It would be nice
to then show
the user some friendly message ("the object doesn't exist
anymore..."), but currently your only options are a stack
trace or a
general exception message.


"Object not found" is a pretty specific exception. There should be a
app-scoped page for this. Also, each Page can define "not found"
location for itself.

Why you cannot get exception further up the stack? How about global
error handler for a start, like Struts has? Where you can define all
exceptions you want to catch globally.

Michael.


-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle
Practices Agile & Plan-Driven Development * Managing
Projects & Teams *
Testing & QA Security * Process Improvement & Measurement *
http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-develop mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-develop



-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference &
EXPO September 19-22, 2005 * San Francisco, CA * Development
Lifecycle Practices Agile & Plan-Driven Development *
Managing Projects & Teams * Testing & QA Security * Process
Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-develop mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-develop





-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-develop mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-develop



-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-develop mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-develop



-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-develop mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-develop

Reply via email to