COM-103 - Fix error handling
diff --git a/src/main/java/org/openldap/commander/ApplicationContext.java b/src/main/java/org/openldap/commander/ApplicationContext.java
index 9b4afe0..fce73dd 100644
--- a/src/main/java/org/openldap/commander/ApplicationContext.java
+++ b/src/main/java/org/openldap/commander/ApplicationContext.java
@@ -17,11 +17,15 @@
 
 import org.apache.wicket.Page;
 import org.apache.wicket.Session;
+import org.apache.wicket.core.request.handler.PageProvider;
+import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
 import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Response;
+import org.apache.wicket.request.cycle.AbstractRequestCycleListener;
+import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.spring.injection.annot.SpringComponentInjector;
-import org.openldap.fortress.cfg.Config;
 
 /**
  * @author Shawn McKinney
@@ -30,26 +34,27 @@
 public class ApplicationContext extends WebApplication
 {
     @Override
-    public Session newSession(Request request, Response response)
+    public Session newSession( Request request, Response response )
     {
-        return new RbacSession(request);
+        return new RbacSession( request );
     }
 
     @Override
     public void init()
     {
         super.init();
-        getComponentInstantiationListeners().add(new SpringComponentInjector(this));
-        getRequestCycleListeners().add(new CommanderRequestCycleListener());
-        getMarkupSettings().setStripWicketTags(true);
+        getComponentInstantiationListeners().add( new SpringComponentInjector( this ) );
 
-        //getApplicationSettings().setPageExpiredErrorPage(LaunchPage.class);
-        //IResourceSettings.setThrowExceptionOnMissingResource(true);
-        // mounting login page so that it can be referred to in the security constraint
-        //mountPage( "/login", LoginPage.class );
-        //mountPage( "/login", LoginPage.class );
-        //mountPage( "/app/login", LoginPage.class );
-        //mountBookmarkablePage( "/login", LoginPage.class );
+        // Catch runtime exceptions this way:
+        getRequestCycleListeners().add( new AbstractRequestCycleListener()
+        {
+            @Override
+            public IRequestHandler onException( RequestCycle cycle, Exception e )
+            {
+                return new RenderPageRequestHandler( new PageProvider( new ErrorPage( e ) ) );
+            }
+        } );
+        getMarkupSettings().setStripWicketTags( true );
     }
 
     public Class<? extends Page> getHomePage()
diff --git a/src/main/java/org/openldap/commander/CommanderRequestCycleListener.java b/src/main/java/org/openldap/commander/CommanderRequestCycleListener.java
index 1508d70..7a86ccb 100644
--- a/src/main/java/org/openldap/commander/CommanderRequestCycleListener.java
+++ b/src/main/java/org/openldap/commander/CommanderRequestCycleListener.java
@@ -31,6 +31,7 @@
  * @author Shawn McKinney
  * @version $Rev$
  */
+@Deprecated
 public class CommanderRequestCycleListener extends AbstractRequestCycleListener
 {
     private static final Logger LOG = Logger.getLogger( CommanderRequestCycleListener.class.getName() );
diff --git a/src/main/java/org/openldap/commander/ErrorPage.java b/src/main/java/org/openldap/commander/ErrorPage.java
index 8fd1159..5a545e5 100644
--- a/src/main/java/org/openldap/commander/ErrorPage.java
+++ b/src/main/java/org/openldap/commander/ErrorPage.java
@@ -26,6 +26,14 @@
  */
 public class ErrorPage extends CommanderBasePage
 {
+    public ErrorPage( Exception e )
+    {
+        add( new Label( "title", new Model<String>( "Runtime Exception Occurred" ) ) );
+        add( new Label( "message", new Model<String>( e.getLocalizedMessage() ) ) );
+        add( new BookmarkablePageLink( "homePage", getApplication().getHomePage() ) );
+    }
+
+    @Deprecated
     public ErrorPage( final PageParameters parameters )
     {
         add( new Label( "title", new Model<String>( parameters.get( "title" ).toString() ) ) );
diff --git a/src/main/resources/org/openldap/commander/ErrorPage.html b/src/main/resources/org/openldap/commander/ErrorPage.html
index 60f42e5..4c6fb1a 100644
--- a/src/main/resources/org/openldap/commander/ErrorPage.html
+++ b/src/main/resources/org/openldap/commander/ErrorPage.html
@@ -12,7 +12,7 @@
   ~ top-level directory of the distribution or, alternatively, at
   ~ <http://www.OpenLDAP.org/license.html>.
   -->
-<html>
+<html xmlns:wicket="http://www.w3.org/1999/XSL/Transform">
 <head></head>
 <body>
 <wicket:extend>