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 2020/06/23 11:04:13 UTC

[myfaces] branch 2.3.x updated: MYFACES-4345 ClientWindow url rendering doesn't follow the specs

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

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


The following commit(s) were added to refs/heads/2.3.x by this push:
     new 5341191  MYFACES-4345 ClientWindow url rendering doesn't follow the specs
5341191 is described below

commit 534119109af4e51052cea252b311f6485f5e8273
Author: Thomas Andraschko <ta...@apache.org>
AuthorDate: Tue Jun 23 13:03:51 2020 +0200

    MYFACES-4345 ClientWindow url rendering doesn't follow the specs
---
 .../servlet/ServletExternalContextImpl.java        | 34 ++++++++++++----------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/impl/src/main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java b/impl/src/main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java
index c74f2d6..76b6969 100755
--- a/impl/src/main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java
+++ b/impl/src/main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java
@@ -28,6 +28,7 @@ import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.security.Principal;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -45,6 +46,7 @@ import javax.faces.context.FlashFactory;
 import javax.faces.context.PartialResponseWriter;
 import javax.faces.context.PartialViewContext;
 import javax.faces.lifecycle.ClientWindow;
+import javax.faces.render.ResponseStateManager;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
@@ -932,27 +934,27 @@ public final class ServletExternalContextImpl extends ServletExternalContextImpl
         
         FacesContext facesContext = getCurrentFacesContext();
         ClientWindow window = facesContext.getExternalContext().getClientWindow();
-        if (window != null)
+        if (window != null && window.isClientWindowRenderModeEnabled(facesContext))
         {
-            //TODO: Use StringBuilder or some optimization.
-            if (window.isClientWindowRenderModeEnabled(facesContext))
+            if (paramMap == null)
             {
-                Map<String, String> map = window.getQueryURLParameters(facesContext);
-                if (map != null)
+                paramMap = new HashMap<String, List<String>>();
+            }
+
+            if (!paramMap.containsKey(ResponseStateManager.CLIENT_WINDOW_URL_PARAM))
+            {
+                paramMap.put(ResponseStateManager.CLIENT_WINDOW_URL_PARAM, Arrays.asList(window.getId()));
+            }
+
+            Map<String, String> additionalQueryURLParameters = window.getQueryURLParameters(facesContext);
+            if (additionalQueryURLParameters != null)
+            {
+                for (Map.Entry<String , String> entry : additionalQueryURLParameters.entrySet())
                 {
-                    for (Map.Entry<String , String> entry : map.entrySet())
-                    {
-                        ArrayList<String> value = new ArrayList<String>(1);
-                        value.add(entry.getValue());
-                        if (paramMap == null)
-                        {
-                            paramMap = new HashMap<String, List<String>>();
-                        }
-                        paramMap.put(entry.getKey(), value);
-                    }
+                    paramMap.put(entry.getKey(), Arrays.asList(entry.getValue()));
                 }
             }
-        }        
+        }
 
         boolean hasParams = paramMap != null && paramMap.size()>0;