You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ta...@apache.org on 2023/01/16 12:15:55 UTC

[myfaces] branch main updated: MYFACES-4543

This is an automated email from the ASF dual-hosted git repository.

tandraschko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/myfaces.git


The following commit(s) were added to refs/heads/main by this push:
     new 45acec732 MYFACES-4543
45acec732 is described below

commit 45acec7320424250672c258b546c3fc934409aa8
Author: Thomas Andraschko <ta...@apache.org>
AuthorDate: Mon Jan 16 13:15:46 2023 +0100

    MYFACES-4543
---
 .../java/org/apache/myfaces/config/FacesConfigurator.java | 15 +++++++++++----
 .../java/org/apache/myfaces/context/flash/FlashImpl.java  | 13 ++++++++++---
 .../lifecycle/clientwindow/ClientWindowFactoryImpl.java   |  2 +-
 3 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java b/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
index 2fc7ba44b..075978436 100755
--- a/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
+++ b/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
@@ -1452,7 +1452,7 @@ public class FacesConfigurator
     
     public static void enableDefaultWindowMode(FacesContext facesContext)
     {
-        if (!isEnableDefaultWindowMode(facesContext))
+        if (!isEnableDefaultWindowMode(facesContext.getExternalContext()))
         {
             String windowMode = WebConfigParamUtils.getStringInitParameter(
                     facesContext.getExternalContext(), 
@@ -1466,7 +1466,7 @@ public class FacesConfigurator
                     ClientWindow.CLIENT_WINDOW_MODE_PARAM_NAME, 
                     ClientWindowFactoryImpl.WINDOW_MODE_URL);
 
-                log.info("The current configuration requires client window enabled, setting it to '"+
+                log.info("The current configuration requires ClientWindow enabled, setting it to '"+
                     defaultWindowMode+ '\'');
 
                 facesContext.getExternalContext().getApplicationMap().put(
@@ -1475,12 +1475,19 @@ public class FacesConfigurator
         }
     }
     
-    public static boolean isEnableDefaultWindowMode(FacesContext facesContext)
+    public static boolean isEnableDefaultWindowMode(ExternalContext externalContext)
     {
-        return Boolean.TRUE.equals(facesContext.getExternalContext().
+        return Boolean.TRUE.equals(externalContext.
             getApplicationMap().get(ENABLE_DEFAULT_WINDOW_MODE));
     }
 
+    public static boolean isUrlWindowMode(ExternalContext externalContext)
+    {
+        return isEnableDefaultWindowMode(externalContext)
+                || ClientWindowFactoryImpl.WINDOW_MODE_URL.equals(
+                        externalContext.getInitParameter(ClientWindow.CLIENT_WINDOW_MODE_PARAM_NAME));
+    }
+
     public void configureProtectedViews()
     {
         Application application = getApplication();
diff --git a/impl/src/main/java/org/apache/myfaces/context/flash/FlashImpl.java b/impl/src/main/java/org/apache/myfaces/context/flash/FlashImpl.java
index fe6d75727..e97d514c8 100644
--- a/impl/src/main/java/org/apache/myfaces/context/flash/FlashImpl.java
+++ b/impl/src/main/java/org/apache/myfaces/context/flash/FlashImpl.java
@@ -45,6 +45,7 @@ import jakarta.faces.event.PostPutFlashValueEvent;
 import jakarta.faces.event.PreClearFlashEvent;
 import jakarta.faces.event.PreRemoveFlashValueEvent;
 import jakarta.faces.lifecycle.ClientWindow;
+import org.apache.myfaces.config.FacesConfigurator;
 import org.apache.myfaces.util.ExternalSpecifications;
 
 import org.apache.myfaces.util.lang.StringUtils;
@@ -166,11 +167,13 @@ public class FlashImpl extends Flash implements ReleasableFlash
     // ~ private fields and constructor ---------------------------------------
 
     private boolean _flashScopeDisabled;
+    private boolean _clientWindowUrlModeEnabled;
     
     public FlashImpl(ExternalContext externalContext)
     {
         // Read whether flash scope is disabled.
         _flashScopeDisabled = MyfacesConfig.getCurrentInstance(externalContext).isFlashScopeDisabled();
+        _clientWindowUrlModeEnabled = FacesConfigurator.isUrlWindowMode(externalContext);
     }
     
     // ~ methods from jakarta.faces.context.Flash -------------------------------
@@ -750,7 +753,9 @@ public class FlashImpl extends Flash implements ReleasableFlash
         ExternalContext externalContext = facesContext.getExternalContext();
         String tokenValue = (String) externalContext.getRequestMap().get(FLASH_RENDER_MAP_TOKEN);
         ClientWindow clientWindow = externalContext.getClientWindow();
-        if (clientWindow != null)
+
+        // MYFACES-4543 skip this ClientWindow logic on URL mode as the flash will be lost without initial redirect
+        if (clientWindow != null && !_clientWindowUrlModeEnabled)
         {
             if (facesContext.getApplication().getStateManager().isSavingStateInClient(facesContext))
             {
@@ -795,7 +800,8 @@ public class FlashImpl extends Flash implements ReleasableFlash
         ExternalContext externalContext = facesContext.getExternalContext();
         String tokenValue = null;
         ClientWindow clientWindow = externalContext.getClientWindow();
-        if (clientWindow != null)
+        // MYFACES-4543 skip this ClientWindow logic on URL mode as the flash will be lost without initial redirect
+        if (clientWindow != null && !_clientWindowUrlModeEnabled)
         {
             if (facesContext.getApplication().getStateManager().isSavingStateInClient(facesContext))
             {
@@ -1155,7 +1161,8 @@ public class FlashImpl extends Flash implements ReleasableFlash
         {
             ExternalContext externalContext = facesContext.getExternalContext();
             ClientWindow clientWindow = externalContext.getClientWindow();
-            if (clientWindow != null)
+            // MYFACES-4543 skip this ClientWindow logic on URL mode as the flash will be lost without initial redirect
+            if (clientWindow != null && !_clientWindowUrlModeEnabled)
             {
                 if (token != null)
                 {
diff --git a/impl/src/main/java/org/apache/myfaces/lifecycle/clientwindow/ClientWindowFactoryImpl.java b/impl/src/main/java/org/apache/myfaces/lifecycle/clientwindow/ClientWindowFactoryImpl.java
index 8dcce3aba..42bdd122b 100644
--- a/impl/src/main/java/org/apache/myfaces/lifecycle/clientwindow/ClientWindowFactoryImpl.java
+++ b/impl/src/main/java/org/apache/myfaces/lifecycle/clientwindow/ClientWindowFactoryImpl.java
@@ -80,7 +80,7 @@ public class ClientWindowFactoryImpl extends ClientWindowFactory
     {
         if (windowMode == null)
         {
-            if (FacesConfigurator.isEnableDefaultWindowMode(context))
+            if (FacesConfigurator.isEnableDefaultWindowMode(context.getExternalContext()))
             {
                 windowMode = WebConfigParamUtils.getStringInitParameter(
                         context.getExternalContext(),