[jboss-cvs] jboss-seam/src/main/org/jboss/seam/interceptors ...
Gavin King
gavin.king at jboss.com
Thu Jul 27 20:46:30 EDT 2006
User: gavin
Date: 06/07/27 20:46:30
Modified: src/main/org/jboss/seam/interceptors
ExceptionInterceptor.java
Log:
added @Render, and javadoc
Revision Changes Path
1.6 +53 -4 jboss-seam/src/main/org/jboss/seam/interceptors/ExceptionInterceptor.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ExceptionInterceptor.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/interceptors/ExceptionInterceptor.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- ExceptionInterceptor.java 26 Jul 2006 22:08:09 -0000 1.5
+++ ExceptionInterceptor.java 28 Jul 2006 00:46:30 -0000 1.6
@@ -1,9 +1,11 @@
-//$Id: ExceptionInterceptor.java,v 1.5 2006/07/26 22:08:09 gavin Exp $
+//$Id: ExceptionInterceptor.java,v 1.6 2006/07/28 00:46:30 gavin Exp $
package org.jboss.seam.interceptors;
import java.util.Map;
+import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseId;
import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;
@@ -12,10 +14,12 @@
import org.jboss.seam.annotations.HttpError;
import org.jboss.seam.annotations.Interceptor;
import org.jboss.seam.annotations.Redirect;
+import org.jboss.seam.annotations.Render;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.contexts.Lifecycle;
import org.jboss.seam.core.FacesMessages;
import org.jboss.seam.core.Init;
+import org.jboss.seam.core.Interpolator;
import org.jboss.seam.core.Manager;
import org.jboss.seam.jsf.AbstractSeamPhaseListener;
@@ -45,12 +49,30 @@
{
if ( e.getClass().isAnnotationPresent(Redirect.class) )
{
- redirect( e.getClass().getAnnotation(Redirect.class).viewId() );
+ Redirect redirect = e.getClass().getAnnotation(Redirect.class);
+ addFacesMessage( e, redirect.message() );
+ redirect( redirect.viewId() );
handled(e);
}
+ else if ( e.getClass().isAnnotationPresent(Render.class) )
+ {
+ if ( Lifecycle.getPhaseId()!=PhaseId.INVOKE_APPLICATION )
+ {
+ //unfortunately, @Render can only really work during an action invocation
+ throw e;
+ }
+ else
+ {
+ Render render = e.getClass().getAnnotation(Render.class);
+ addFacesMessage( e, render.message() );
+ render( render.viewId() );
+ return null;
+ }
+ }
else if ( e.getClass().isAnnotationPresent(HttpError.class) )
{
- error( e.getClass().getAnnotation(HttpError.class).errorCode(), e.getMessage() );
+ HttpError httpError = e.getClass().getAnnotation(HttpError.class);
+ error( httpError.errorCode(), renderExceptionMessage( e, httpError.message() ) );
handled(e);
}
else if ( Init.instance().isDebug() &&
@@ -64,6 +86,17 @@
}
}
+ private void addFacesMessage(Exception e, String message)
+ {
+ FacesMessages.instance().add( renderExceptionMessage(e, message) );
+ }
+
+ private String renderExceptionMessage(Exception e, String message)
+ {
+ return Interpolator.instance()
+ .interpolate( "".equals(message) ? e.getMessage() : message );
+ }
+
private void error(int code, String message)
{
if ( log.isDebugEnabled() ) log.debug("sending error: " + code);
@@ -76,8 +109,12 @@
private void redirect(String viewId)
{
- if ( log.isDebugEnabled() ) log.debug("redirecting to: " + viewId);
FacesContext facesContext = FacesContext.getCurrentInstance();
+ if ( "".equals(viewId) )
+ {
+ viewId = facesContext.getViewRoot().getViewId();
+ }
+ if ( log.isDebugEnabled() ) log.debug("redirecting to: " + viewId);
org.jboss.seam.core.Redirect redirect = org.jboss.seam.core.Redirect.instance();
redirect.setViewId(viewId);
redirect.execute();
@@ -85,6 +122,18 @@
AbstractSeamPhaseListener.storeAnyConversationContext(facesContext);
}
+ private void render(String viewId)
+ {
+ FacesContext context = FacesContext.getCurrentInstance();
+ if ( !"".equals(viewId) )
+ {
+ if ( log.isDebugEnabled() ) log.debug("rendering: " + viewId);
+ UIViewRoot viewRoot = context.getApplication().getViewHandler().createView(context, viewId);
+ context.setViewRoot(viewRoot);
+ }
+ context.renderResponse();
+ }
+
private void redirectToDebugPage(Exception e)
{
log.error("redirecting to debug page", e);
More information about the jboss-cvs-commits
mailing list