You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by ta...@apache.org on 2015/12/18 16:16:15 UTC
deltaspike git commit: DELTASPIKE-1043 Loop redirect in error-page
(404) with CLIENTWINDOW
Repository: deltaspike
Updated Branches:
refs/heads/master 9ba6c92bd -> 086871c02
DELTASPIKE-1043 Loop redirect in error-page (404) with CLIENTWINDOW
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/086871c0
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/086871c0
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/086871c0
Branch: refs/heads/master
Commit: 086871c024dd1a7e1c97d5d1caa1c1f593372b46
Parents: 9ba6c92
Author: tandraschko <ta...@apache.org>
Authored: Fri Dec 18 16:15:41 2015 +0100
Committer: tandraschko <ta...@apache.org>
Committed: Fri Dec 18 16:15:41 2015 +0100
----------------------------------------------------------------------
.../strategy/ClientSideWindowStrategy.java | 10 +++++--
.../jsf/impl/util/ClientWindowHelper.java | 30 ++++++++++++--------
.../deltaspike/jsf/impl/util/JsfUtils.java | 6 ++++
.../main/resources/static/windowhandler.html | 2 +-
4 files changed, 33 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/086871c0/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/ClientSideWindowStrategy.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/ClientSideWindowStrategy.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/ClientSideWindowStrategy.java
index 5957c73..572da07 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/ClientSideWindowStrategy.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/ClientSideWindowStrategy.java
@@ -42,6 +42,7 @@ public class ClientSideWindowStrategy extends AbstractClientWindowStrategy
private static final String UNINITIALIZED_WINDOW_ID_VALUE = "uninitializedWindowId";
private static final String WINDOW_ID_REPLACE_PATTERN = "$$windowIdValue$$";
+ private static final String REQUEST_URL_REPLACE_PATTERN = "$$requestUrl$$";
private static final String NOSCRIPT_URL_REPLACE_PATTERN = "$$noscriptUrl$$";
/**
@@ -116,8 +117,13 @@ public class ClientSideWindowStrategy extends AbstractClientWindowStrategy
}
// set the windowId value in the javascript code
- windowHandlerHtml = windowHandlerHtml.replace(WINDOW_ID_REPLACE_PATTERN, windowId);
-
+ windowHandlerHtml = windowHandlerHtml.replace(WINDOW_ID_REPLACE_PATTERN,
+ windowId);
+ // set the current request url
+ // on the client we can't use window.location as the location
+ // could be a different when using forwards
+ windowHandlerHtml = windowHandlerHtml.replace(REQUEST_URL_REPLACE_PATTERN,
+ ClientWindowHelper.constructRequestUrl(externalContext));
// set the noscript-URL for users with no JavaScript
windowHandlerHtml =
windowHandlerHtml.replace(NOSCRIPT_URL_REPLACE_PATTERN, getNoscriptUrl(externalContext));
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/086871c0/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java
index 59b15d9..858c1f3 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java
@@ -53,7 +53,24 @@ public abstract class ClientWindowHelper
public static final String REQUEST_WINDOW_ID_PREFIX = "dsrwid-";
}
+ public static String constructRequestUrl(ExternalContext externalContext)
+ {
+ String url = externalContext.getRequestContextPath()
+ + externalContext.getRequestServletPath();
+ if (externalContext.getRequestPathInfo() != null)
+ {
+ url += externalContext.getRequestPathInfo();
+ }
+
+ url = JsfUtils.addRequestParameters(externalContext, url, true);
+ //TODO check if it isn't better to fix addRequestParameters itself
+ //only #encodeResourceURL is portable currently
+ url = externalContext.encodeResourceURL(url);
+
+ return url;
+ }
+
/**
* Handles the initial redirect for the LAZY mode, if no windowId is available in the current request URL.
*
@@ -68,18 +85,7 @@ public abstract class ClientWindowHelper
ExternalContext externalContext = facesContext.getExternalContext();
- String url = externalContext.getRequestContextPath()
- + externalContext.getRequestServletPath();
-
- if (externalContext.getRequestPathInfo() != null)
- {
- url += externalContext.getRequestPathInfo();
- }
-
- url = JsfUtils.addRequestParameters(externalContext, url, true);
- //TODO check if it isn't better to fix addRequestParameters itself
- //only #encodeResourceURL is portable currently
- url = facesContext.getExternalContext().encodeResourceURL(url);
+ String url = constructRequestUrl(externalContext);
// remember the initial redirect windowId till the next request - see #729
addRequestWindowIdCookie(facesContext, newWindowId, newWindowId);
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/086871c0/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/JsfUtils.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/JsfUtils.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/JsfUtils.java
index e0b55cd..6914182 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/JsfUtils.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/JsfUtils.java
@@ -44,6 +44,7 @@ import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.apache.deltaspike.core.util.StringUtils;
public abstract class JsfUtils
{
@@ -187,6 +188,11 @@ public abstract class JsfUtils
if (!url.contains(entry.getKey() + "=" + value) &&
!url.contains(entry.getKey() + "=" + encodeURLParameterValue(value, externalContext)))
{
+ if (StringUtils.isEmpty(entry.getKey()) && StringUtils.isEmpty(value))
+ {
+ continue;
+ }
+
if (!existingParameters)
{
finalUrl.append("?");
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/086871c0/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html b/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html
index c4a956b..bfd46d9 100644
--- a/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html
+++ b/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html
@@ -142,7 +142,7 @@
var requestToken = dswh.utils.generateRequestToken();
- var redirectUrl = window.location.href;
+ var redirectUrl = '$$requestUrl$$';
redirectUrl = dswh.utils.setUrlParam(redirectUrl, "dsrid", requestToken);
// we still add the windowId page param to support lazy windowId dropping for some clients
redirectUrl = dswh.utils.setUrlParam(redirectUrl, "dswid", urlId);