0 Replies Latest reply on Jan 22, 2007 9:42 AM by weidong jin

    who can help me?I am stamped by Interceptor of seam

    weidong jin Newbie

      When I run example "icefaces",I debug class LoggedInInterceptor.But I
      found :

      import javax.faces.event.PhaseId;
      
      import org.jboss.seam.annotations.Interceptor;
      import org.jboss.seam.contexts.Contexts;
      import org.jboss.seam.contexts.Lifecycle;
      import org.jboss.seam.interceptors.BijectionInterceptor;
      import org.jboss.seam.interceptors.BusinessProcessInterceptor;
      import org.jboss.seam.interceptors.ConversationInterceptor;
      import org.jboss.seam.interceptors.RemoveInterceptor;
      import org.jboss.seam.interceptors.ValidationInterceptor;
      
      @Interceptor(around={BijectionInterceptor.class, ValidationInterceptor.class,
       ConversationInterceptor.class, BusinessProcessInterceptor.class},
       within=RemoveInterceptor.class)
      public class LoggedInInterceptor
      {
      
       @AroundInvoke
       public Object checkLoggedIn(InvocationContext invocation) throws Exception
       {
       boolean isLoggedIn = Contexts.getSessionContext().get("loggedIn")!=null;
       if ( Lifecycle.getPhaseId()==PhaseId.INVOKE_APPLICATION )
       {
       if (isLoggedIn)
       {
       return invocation.proceed();
       }
       else
       {
       return "login";
       }
       }
       else
       {
       if ( isLoggedIn )
       {
       return invocation.proceed();
       }
       else
       {
      
      Method method = invocation.getMethod();
       if ( method.getReturnType().equals(void.class) )
       {
       return null;
       }
      
       else
       {
       return method.invoke( invocation.getTarget(), invocation.getParameters() );
       }
       }
       }
       }
      
      }


      Why "return null" not "return 'login'" in red fragment.
      I clicked link "http://localhost:8000/seam-registration/main.seam?cid=2" ,
      it did not return to "login" page.
      So I fixed "retrun null" above to "return 'login'",
      but it still did not return to "login" page.
      Through logging, I found if "Lifecycle.getPhaseId()!=PhaseId.INVOKE_APPLICATION",
      it will never be redirect to new page.
      How can I redirect to new page in Interceptor,
      and who can tell me how does Interceptor work?