0 Replies Latest reply on Mar 8, 2007 12:36 PM by Darryl Smith

    Why does Seam checks for LoginRedirection after ApplyRequest

    Darryl Smith Newbie

      Seam will apply page parameters before it does the checks to see if login redirection is required.

      This is problematic for applications rely on session scope information created in authenticator being present
      e.g. using @In(scope=SESSION) currentUser;

      <page view-id="/secure/browseUsers.xhtml">
       <param name="firstResult" value="#{userBrowseQueryFactory.firstResult}" converterId="javax.faces.Integer" />
      </page>
      


      12:16:53,383 ERROR [DebugPageHandler] redirecting to debug page
      org.jboss.seam.RequiredException: In attribute requires non-null value: userBrowseQueryFactory.currentUser
       at org.jboss.seam.Component.getValueToInject(Component.java:1887)
       at org.jboss.seam.Component.injectAttributes(Component.java:1336)
       at org.jboss.seam.Component.inject(Component.java:1163)
       at org.jboss.seam.interceptors.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:46)
       at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
       at org.jboss.seam.interceptors.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:27)
       at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
       at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:103)
       at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:154)
       at org.jboss.seam.intercept.JavaBeanInterceptor.intercept(JavaBeanInterceptor.java:89)
       at edu.uga.ais.piac.pva.action.user.UserBrowseQueryFactory$$EnhancerByCGLIB$$5ef43164.setFirstResult(<generated>)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:406)
       at org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:173)
       at org.apache.myfaces.el.ValueBindingImpl.setValue(ValueBindingImpl.java:275)
       at org.jboss.seam.core.Expressions$1.setValue(Expressions.java:67)
       at org.jboss.seam.core.Pages.applyRequestParameterValues(Pages.java:608)
       at org.jboss.seam.jsf.AbstractSeamPhaseListener.beforeRender(AbstractSeamPhaseListener.java:176)
       at org.jboss.seam.jsf.SeamPhaseListener.beforePhase(SeamPhaseListener.java:57)
       at org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersBefore(PhaseListenerManager.java:70)
       at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:373)
       at javax.faces.webapp.FacesServlet.service(FacesServlet.java:138)
      


      You could workaround the problem with @In(request=false,scope=SESSION) currentUser or call Contexts.getSessionContext().get("currentUser");

      My question is why would Seam need to need to apply request parameters if it is going to redirect to login page?