Author: ate Date: Thu Jun 14 09:28:37 2007 New Revision: 547294 URL: http://svn.apache.org/viewvc?view=rev&rev=547294 Log: WICKET-654: New Wicket Portlet support: translating Wicket relative paths back to fully qualified paths for usage in a portlet context See: https://issues.apache.org/jira/browse/WICKET-654
- note: initial implementation, probably needs further improvement Modified: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java Modified: incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java?view=diff&rev=547294&r1=547293&r2=547294 ============================================================================== --- incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java (original) +++ incubator/wicket/branches/wicket-1.3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java Thu Jun 14 09:28:37 2007 @@ -24,6 +24,7 @@ import org.apache.wicket.Application; import org.apache.wicket.IRedirectListener; +import org.apache.wicket.RenderContext; import org.apache.wicket.RequestListenerInterface; import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.protocol.http.WebApplication; @@ -149,10 +150,23 @@ return relativePathPrefixToContextRoot; } + if (RenderContext.get().isEmbedded()) + { + return relativePathPrefixToContextRoot = getHttpServletRequest().getContextPath()+"/"; + } + // Prepend to get back to the wicket handler. String tmp = getRelativePathPrefixToWicketHandler(); - PrependingStringBuffer prepender = new PrependingStringBuffer(tmp); - + + boolean embeddedRequest = RenderContext.get().isEmbedded(); + + PrependingStringBuffer prepender = new PrependingStringBuffer(); + + if (!embeddedRequest) + { + prepender.prepend(tmp); + } + String path = Strings.replaceAll(getPath(), "%3A", ":").toString(); if (path == null || path.length() == 0) { @@ -218,10 +232,12 @@ } PrependingStringBuffer prepender = new PrependingStringBuffer(); + + boolean embeddedRequest = RenderContext.get().isEmbedded(); // For AJAX requests, we need to make the URLs relative to the // original page. - if (isAjax()) + if (!embeddedRequest && isAjax()) { for (int i = 0; i < getRequestParameters().getUrlDepth(); i++) { @@ -289,28 +305,42 @@ relativeUrl = wicketRedirectUrl; } + int lastPathPos = -1; if (depthRelativeToWicketHandler == -1) { int depth = 0; + int ajaxUrlDepth = isAjax() ? getRequestParameters().getUrlDepth() : -1; for (int i = 0; i < relativeUrl.length(); i++) { if (relativeUrl.charAt(i) == '?') - { + { break; } if (relativeUrl.charAt(i) == '/') { depth++; + lastPathPos = i; + if (depth == ajaxUrlDepth) + { + return relativeUrl.substring(0,lastPathPos+1); + } } } depthRelativeToWicketHandler = depth; } - - for (int i = 0; i < depthRelativeToWicketHandler; i++) + + if (embeddedRequest) { - prepender.prepend("../"); + prepender.prepend(getHttpServletRequest().getServletPath()); + prepender.prepend(getHttpServletRequest().getContextPath()); + } + else + { + for (int i = 0; i < depthRelativeToWicketHandler; i++) + { + prepender.prepend("../"); + } } - return relativePathPrefixToWicketHandler = prepender.toString(); }