MYFACES-4345 ClientWindow url rendering doesn't follow the specs
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 2ea9913..735ec20 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.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.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;
@@ -888,7 +890,13 @@
{
paramMap = new HashMap<>(5, 1f);
}
- List<String> values = paramMap.computeIfAbsent(currentName, k -> new ArrayList<>(1));
+
+ List<String> values = paramMap.get(currentName);
+ if (values == null)
+ {
+ values = new ArrayList<>(1);
+ paramMap.put(currentName, values);
+ }
try
{
@@ -924,26 +932,27 @@
FacesContext facesContext = getCurrentFacesContext();
ClientWindow window = facesContext.getExternalContext().getClientWindow();
- if (window != null)
+ if (window != null && window.isClientWindowRenderModeEnabled(facesContext))
{
- if (window.isClientWindowRenderModeEnabled(facesContext))
+ if (paramMap == null)
{
- Map<String, String> map = window.getQueryURLParameters(facesContext);
- if (map != null)
+ paramMap = new HashMap<>(5, 1f);
+ }
+
+ 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<>(1);
- value.add(entry.getValue());
- if (paramMap == null)
- {
- paramMap = new HashMap<>(5, 1f);
- }
- paramMap.put(entry.getKey(), value);
- }
+ paramMap.put(entry.getKey(), Arrays.asList(entry.getValue()));
}
}
- }
+ }
boolean hasParams = paramMap != null && paramMap.size() > 0;