You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2010/07/16 20:12:07 UTC

svn commit: r964893 - in /myfaces/extensions/cdi/trunk/jee-modules: jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/config/ jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/request/ jsf-mod...

Author: gpetracek
Date: Fri Jul 16 18:12:06 2010
New Revision: 964893

URL: http://svn.apache.org/viewvc?rev=964893&view=rev
Log:
EXTCDI-1, EXTCDI-2 and EXTCDI-3 RedirectHandler

Added:
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/request/DefaultRedirectHandler.java
      - copied, changed from r964799, myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/request/DefaultRedirectProcessor.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/RedirectHandler.java
      - copied, changed from r964799, myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/RedirectProcessor.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/request/DefaultRedirectHandler.java
      - copied, changed from r964799, myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/DefaultRedirectProcessor.java
Removed:
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/request/DefaultRedirectProcessor.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/RedirectProcessor.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/DefaultRedirectProcessor.java
Modified:
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/config/DefaultWindowContextConfig.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/RedirectedConversationAwareExternalContext.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/JsfAwareWindowContextConfig.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/RedirectedConversationAwareExternalContext.java

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/config/DefaultWindowContextConfig.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/config/DefaultWindowContextConfig.java?rev=964893&r1=964892&r2=964893&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/config/DefaultWindowContextConfig.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/config/DefaultWindowContextConfig.java Fri Jul 16 18:12:06 2010
@@ -22,8 +22,8 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContextConfig;
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.api.ConfigParameter.*;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.JsfAwareWindowContextConfig;
-import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.RedirectProcessor;
-import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.request.DefaultRedirectProcessor;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.RedirectHandler;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.request.DefaultRedirectHandler;
 
 import javax.enterprise.context.Dependent;
 import javax.enterprise.context.ApplicationScoped;
@@ -178,8 +178,8 @@ public class DefaultWindowContextConfig 
         setAttribute(GROUPED_CONVERSATION_TIMEOUT, Integer.parseInt(timeoutString));
     }
 
-    public RedirectProcessor getRedirectProcessor()
+    public RedirectHandler getRedirectHandler()
     {
-        return new DefaultRedirectProcessor();
+        return new DefaultRedirectHandler();
     }
 }
\ No newline at end of file

Copied: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/request/DefaultRedirectHandler.java (from r964799, myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/request/DefaultRedirectProcessor.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/request/DefaultRedirectHandler.java?p2=myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/request/DefaultRedirectHandler.java&p1=myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/request/DefaultRedirectProcessor.java&r1=964799&r2=964893&rev=964893&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/request/DefaultRedirectProcessor.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/request/DefaultRedirectHandler.java Fri Jul 16 18:12:06 2010
@@ -18,7 +18,7 @@
  */
 package org.apache.myfaces.extensions.cdi.javaee.jsf.impl.request;
 
-import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.RedirectProcessor;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.RedirectHandler;
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.UUID_ID_KEY;
 
 import javax.faces.context.ExternalContext;
@@ -27,17 +27,22 @@ import java.io.IOException;
 /**
  * @author Gerhard Petracek
  */
-public class DefaultRedirectProcessor implements RedirectProcessor
+public class DefaultRedirectHandler implements RedirectHandler
 {
-    public void redirect(ExternalContext externalContext, String url, String uniqueRequestId) throws IOException
+    public void sendRedirect(ExternalContext externalContext, String url, String requestIdKey) throws IOException
     {
-        if (uniqueRequestId != null)
+        if (requestIdKey != null)
         {
-            url = url + "?" + UUID_ID_KEY + "=" + uniqueRequestId;
+            url = url + "?" + UUID_ID_KEY + "=" + requestIdKey;
 
             url = externalContext.encodeActionURL(url);
         }
 
         externalContext.redirect(url);
     }
+
+    public String restoreRequestIdKey(ExternalContext externalContext)
+    {
+        return externalContext.getRequestParameterMap().get(UUID_ID_KEY);
+    }
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java?rev=964893&r1=964892&r2=964893&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java Fri Jul 16 18:12:06 2010
@@ -31,6 +31,8 @@ import org.apache.myfaces.extensions.cdi
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.resolveWindowContextId;
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.restoreInformationOfRequest;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableWindowContext;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.RedirectHandler;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.JsfAwareWindowContextConfig;
 
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.RequestScoped;
@@ -74,17 +76,24 @@ public class DefaultWindowContextManager
 
     private WindowContextConfig windowContextConfig;
 
+    private RedirectHandler redirectHandler;
+
     @PostConstruct
     protected void init()
     {
-        windowContextConfig = this.configResolver.resolve(WindowContextConfig.class);
+        this.windowContextConfig = this.configResolver.resolve(WindowContextConfig.class);
+        this.redirectHandler = configResolver.resolve(JsfAwareWindowContextConfig.class).getRedirectHandler();
     }
 
     //don't change/optimize this observer!!!
     protected void cleanup(@Observes @AfterPhase(PhaseId.RESTORE_VIEW) PhaseEvent phaseEvent,
-                           RequestTypeResolver requestTypeResolver)
+                           RequestTypeResolver requestTypeResolver,
+                           ConfigResolver configResolver)
     {
-        processConversationAwareRedirectsAndForwards(phaseEvent, requestTypeResolver);
+        processConversationAwareRedirectsAndForwards(phaseEvent,
+                                                     requestTypeResolver,
+                                                     configResolver.resolve(
+                                                             JsfAwareWindowContextConfig.class).getRedirectHandler());
 
         //for performance reasons + cleanup at the beginning of the request (check timeout,...)
         //+ we aren't allowed to cleanup in case of redirects
@@ -98,12 +107,12 @@ public class DefaultWindowContextManager
     }
 
     private void processConversationAwareRedirectsAndForwards(
-            PhaseEvent phaseEvent, RequestTypeResolver requestTypeResolver)
+            PhaseEvent phaseEvent, RequestTypeResolver requestTypeResolver, RedirectHandler redirectHandler)
     {
         //restore view-id in case of a get request - we need it esp. for redirects
         if (!requestTypeResolver.isPostRequest())
         {
-            restoreInformationOfRequest(phaseEvent.getFacesContext());
+            restoreInformationOfRequest(phaseEvent.getFacesContext(), redirectHandler);
         }
     }
 
@@ -177,7 +186,8 @@ public class DefaultWindowContextManager
     //TODO improve performance
     public WindowContext getCurrentWindowContext()
     {
-        Long windowContextId = resolveWindowContextId(this.windowContextConfig.isGetRequestParameterSupported());
+        Long windowContextId = resolveWindowContextId(this.windowContextConfig.isGetRequestParameterSupported(),
+                                                      this.redirectHandler);
 
         if (windowContextId == null)
         {

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/RedirectedConversationAwareExternalContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/RedirectedConversationAwareExternalContext.java?rev=964893&r1=964892&r2=964893&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/RedirectedConversationAwareExternalContext.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/RedirectedConversationAwareExternalContext.java Fri Jul 16 18:12:06 2010
@@ -19,7 +19,7 @@
 package org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation;
 
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.*;
-import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.RedirectProcessor;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.RedirectHandler;
 
 import javax.faces.context.ExternalContext;
 import java.io.IOException;
@@ -40,7 +40,7 @@ public class RedirectedConversationAware
 {
     private ExternalContext wrapped;
 
-    private static RedirectProcessor redirectProcessor;
+    private static RedirectHandler redirectHandler;
 
     public RedirectedConversationAwareExternalContext(ExternalContext wrapped)
     {
@@ -259,14 +259,14 @@ public class RedirectedConversationAware
             throws IOException
     {
         lazyInit();
-        sendRedirect(this.wrapped, url, redirectProcessor);
+        sendRedirect(this.wrapped, url, redirectHandler);
     }
 
     private synchronized void lazyInit()
     {
-        if(redirectProcessor == null)
+        if(redirectHandler == null)
         {
-            redirectProcessor = getRedirectProcessor();
+            redirectHandler = getRedirectHandler();
         }
     }
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/JsfAwareWindowContextConfig.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/JsfAwareWindowContextConfig.java?rev=964893&r1=964892&r2=964893&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/JsfAwareWindowContextConfig.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/JsfAwareWindowContextConfig.java Fri Jul 16 18:12:06 2010
@@ -25,5 +25,5 @@ import org.apache.myfaces.extensions.cdi
  */
 public abstract class JsfAwareWindowContextConfig extends WindowContextConfig
 {
-    public abstract RedirectProcessor getRedirectProcessor();
+    public abstract RedirectHandler getRedirectHandler();
 }

Copied: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/RedirectHandler.java (from r964799, myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/RedirectProcessor.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/RedirectHandler.java?p2=myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/RedirectHandler.java&p1=myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/RedirectProcessor.java&r1=964799&r2=964893&rev=964893&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/RedirectProcessor.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/RedirectHandler.java Fri Jul 16 18:12:06 2010
@@ -24,7 +24,9 @@ import java.io.IOException;
 /**
  * @author Gerhard Petracek
  */
-public interface RedirectProcessor
+public interface RedirectHandler
 {
-    void redirect(ExternalContext externalContext, String url, String uniqueRequestId) throws IOException;
+    void sendRedirect(ExternalContext externalContext, String url, String requestIdKey) throws IOException;
+
+    String restoreRequestIdKey(ExternalContext externalContext);
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java?rev=964893&r1=964892&r2=964893&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java Fri Jul 16 18:12:06 2010
@@ -29,7 +29,7 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.core.impl.utils.CodiUtils;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.api.qualifier.Jsf;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.WindowContextIdHolderComponent;
-import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.RedirectProcessor;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.RedirectHandler;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.JsfAwareWindowContextConfig;
 
 import javax.enterprise.inject.spi.Bean;
@@ -155,14 +155,24 @@ public class ConversationUtils
     }
 
     //TODO
-    public static Long resolveWindowContextId(boolean requestParameterSupported)
+    public static Long resolveWindowContextId(boolean requestParameterSupported, RedirectHandler redirectHandler)
     {
         FacesContext facesContext = FacesContext.getCurrentInstance();
 
         Map<String, String> requestParameterMap = facesContext.getExternalContext().getRequestParameterMap();
         Map<String, Object> requestMap = facesContext.getExternalContext().getRequestMap();
 
-        String uuidKey = requestParameterMap.get(UUID_ID_KEY);
+        String uuidKey = null;
+
+        if(redirectHandler != null)
+        {
+            uuidKey = redirectHandler.restoreRequestIdKey(facesContext.getExternalContext());
+        }
+
+        if(uuidKey == null)
+        {
+            uuidKey = requestParameterMap.get(UUID_ID_KEY);
+        }
 
         //try to restore {@link UuidEntry}
         if(uuidKey != null)
@@ -213,6 +223,9 @@ public class ConversationUtils
 
         if (windowContextIdHolder != null)
         {
+            requestMap.put(
+                    WindowContextManager.WINDOW_CONTEXT_ID_PARAMETER_KEY, windowContextIdHolder.getWindowContextId());
+
             //TODO cache for request
             return windowContextIdHolder.getWindowContextId();
         }
@@ -252,7 +265,7 @@ public class ConversationUtils
     }
 
     //TODO
-    public static void restoreInformationOfRequest(FacesContext facesContext)
+    public static void restoreInformationOfRequest(FacesContext facesContext, RedirectHandler redirectHandler)
     {
         Map<String, String> requestParameterMap = facesContext.getExternalContext().getRequestParameterMap();
         Map<String, Object> requstMap = facesContext.getExternalContext().getRequestMap();
@@ -260,7 +273,17 @@ public class ConversationUtils
 
         requstMap.put(NEW_VIEW_ID_KEY, facesContext.getViewRoot().getViewId());
 
-        String uuidKey = requestParameterMap.get(UUID_ID_KEY);
+        String uuidKey = null;
+
+        if(redirectHandler != null)
+        {
+            uuidKey = redirectHandler.restoreRequestIdKey(facesContext.getExternalContext());
+        }
+
+        if(uuidKey == null)
+        {
+            uuidKey = requestParameterMap.get(UUID_ID_KEY);
+        }
 
         if(uuidKey != null)
         {
@@ -350,11 +373,11 @@ public class ConversationUtils
 
     public static void sendRedirect(ExternalContext externalContext,
                                     String url,
-                                    RedirectProcessor redirectProcessor) throws IOException
+                                    RedirectHandler redirectHandler) throws IOException
     {
-        if(redirectProcessor != null)
+        if(redirectHandler != null)
         {
-            Long windowContextId = resolveWindowContextId();
+            Long windowContextId = resolveWindowContextId(redirectHandler);
 
             String uniqueRequestId = null;
             if (windowContextId != null)
@@ -366,7 +389,7 @@ public class ConversationUtils
                 uniqueRequestId = uuidEntry.getUuid();
             }
 
-            redirectProcessor.redirect(externalContext, url, uniqueRequestId);
+            redirectHandler.sendRedirect(externalContext, url, uniqueRequestId);
         }
         else
         {
@@ -375,13 +398,14 @@ public class ConversationUtils
         }
     }
 
-    private static Long resolveWindowContextId()
+    private static Long resolveWindowContextId(RedirectHandler redirectHandler)
     {
         return ConversationUtils.resolveWindowContextId(false
-                /*TODO log warning if request parameter is disabled - we have to use false here*/);
+                /*TODO log warning if request parameter is disabled - we have to use false here*/,
+                redirectHandler);
     }
 
-    public static RedirectProcessor getRedirectProcessor()
+    public static RedirectHandler getRedirectHandler()
     {
         Set<Bean<?>> configResolvers = getInstance().getBeanManager().getBeans(ConfigResolver.class);
 
@@ -389,6 +413,6 @@ public class ConversationUtils
         ConfigResolver configResolver = (ConfigResolver) CodiUtils
                 .getOrCreateScopedInstanceOfBean(configResolvers.iterator().next());
 
-        return configResolver.resolve(JsfAwareWindowContextConfig.class).getRedirectProcessor();
+        return configResolver.resolve(JsfAwareWindowContextConfig.class).getRedirectHandler();
     }
 }

Copied: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/request/DefaultRedirectHandler.java (from r964799, myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/DefaultRedirectProcessor.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/request/DefaultRedirectHandler.java?p2=myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/request/DefaultRedirectHandler.java&p1=myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/DefaultRedirectProcessor.java&r1=964799&r2=964893&rev=964893&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/DefaultRedirectProcessor.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/request/DefaultRedirectHandler.java Fri Jul 16 18:12:06 2010
@@ -16,10 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.myfaces.extensions.cdi.javaee.jsf2.impl.scope.conversation;
+package org.apache.myfaces.extensions.cdi.javaee.jsf2.impl.request;
 
-import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.RedirectProcessor;
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.UUID_ID_KEY;
+import static org.apache.myfaces.extensions.cdi.core.api.util.ClassUtils.tryToLoadClassForName;
 
 import javax.faces.context.ExternalContext;
 import java.io.IOException;
@@ -27,18 +27,43 @@ import java.io.IOException;
 /**
  * @author Gerhard Petracek
  */
-public class DefaultRedirectProcessor implements RedirectProcessor
+public class DefaultRedirectHandler extends
+        org.apache.myfaces.extensions.cdi.javaee.jsf.impl.request.DefaultRedirectHandler
 {
-    public void redirect(ExternalContext externalContext, String url, String uniqueRequestId) throws IOException
+    //workaround for myfaces core2
+    private final boolean useFallback;
+
+    public DefaultRedirectHandler()
     {
-        //TODO try to use special jsf 2.0 api's
-        if (uniqueRequestId != null)
-        {
-            url = url + "?" + UUID_ID_KEY + "=" + uniqueRequestId;
+        this.useFallback = tryToLoadClassForName("org.apache.myfaces.context.FacesContextFactoryImpl") != null;
+    }
 
-            url = externalContext.encodeActionURL(url);
+    @Override
+    public void sendRedirect(ExternalContext externalContext, String url, String requestIdKey) throws IOException
+    {
+        if(this.useFallback)
+        {
+            super.sendRedirect(externalContext, url, requestIdKey);
+            return;
+        }
+        
+        if (requestIdKey != null)
+        {
+            externalContext.getFlash().putNow(UUID_ID_KEY, requestIdKey);
+            externalContext.getFlash().keep(UUID_ID_KEY);
         }
 
         externalContext.redirect(url);
     }
+
+    @Override
+    public String restoreRequestIdKey(ExternalContext externalContext)
+    {
+        if(this.useFallback)
+        {
+            return super.restoreRequestIdKey(externalContext);
+        }
+
+        return (String)externalContext.getFlash().remove(UUID_ID_KEY);
+    }
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/RedirectedConversationAwareExternalContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/RedirectedConversationAwareExternalContext.java?rev=964893&r1=964892&r2=964893&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/RedirectedConversationAwareExternalContext.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/RedirectedConversationAwareExternalContext.java Fri Jul 16 18:12:06 2010
@@ -19,7 +19,7 @@
 package org.apache.myfaces.extensions.cdi.javaee.jsf2.impl.scope.conversation;
 
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.*;
-import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.RedirectProcessor;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.RedirectHandler;
 
 import javax.faces.context.ExternalContext;
 import javax.faces.context.ExternalContextWrapper;
@@ -32,7 +32,7 @@ public class RedirectedConversationAware
 {
     private final ExternalContext wrapped;
 
-    private RedirectProcessor redirectProcessor;
+    private RedirectHandler redirectHandler;
 
     public RedirectedConversationAwareExternalContext(ExternalContext wrapped)
     {
@@ -49,14 +49,14 @@ public class RedirectedConversationAware
             throws IOException
     {
         lazyInit();
-        sendRedirect(this.wrapped, url, this.redirectProcessor);
+        sendRedirect(this.wrapped, url, this.redirectHandler);
     }
 
     private synchronized void lazyInit()
     {
-        if(this.redirectProcessor == null)
+        if(this.redirectHandler == null)
         {
-            this.redirectProcessor = getRedirectProcessor();
+            this.redirectHandler = getRedirectHandler();
         }
     }
 }