Author: knopp
Date: Tue Mar 31 11:20:57 2009
New Revision: 760398
URL: http://svn.apache.org/viewvc?rev=760398&view=rev
Log:
even more cool stuff
Added:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/PageFactory.java
(contents, props changed)
- copied, changed from r759532,
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/IPageFactory.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/persistent/disk/
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/encoder/BufferedResponseEncoder.java
(with props)
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/BufferedResponseRequestHandler.java
(with props)
Removed:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/IPageFactory.java
Modified:
wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage1.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/DefaultPageFactory.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/RequestHandlerEncoderRegistry.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRenderer.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/ListenerInterfaceRequestHandler.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/RenderPageRequestHandler.java
wicket/sandbox/knopp/experimental/wicket-ng/src/test/java/org/apache/wicket/request/UrlRendererTest.java
Modified:
wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage1.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage1.java?rev=760398&r1=760397&r2=760398&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage1.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage1.java
Tue Mar 31 11:20:57 2009
@@ -21,8 +21,13 @@
getPageParameters().setIndexedParameter(0,
"indexed1");
getPageParameters().setIndexedParameter(1,
"indexed2");
getPageParameters().setIndexedParameter(2,
"indexed3");
+
+ // necessary on stateless page
+ if (getPage().isPageStateless())
+
RequestCycle.get().setResponsePage(getPage());
}
};
+ l1.setBookmarkable(true);
l1.setLabel("Link 1 - Add Some Parameters");
add(l1);
@@ -38,6 +43,10 @@
System.out.println("link 2 clicked");
getPageParameters().removeNamedParameter("p1");
getPageParameters().clearIndexedParameters();
+
+ if (getPage().isPageStateless())
+ // necessary on stateless page
+
RequestCycle.get().setResponsePage(getPage());
}
};
l2.setLabel("Link 2 - Remove The Parameters (this link is
bookmarkable listener interface!)");
@@ -94,9 +103,19 @@
add(l5);
}
+ private boolean rendered = false;
+
@Override
public void renderPage()
{
super.renderPage();
+ rendered = true;
+ }
+
+ @Override
+ public boolean isPageStateless()
+ {
+ return false;
+// return !rendered;
}
}
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/DefaultPageFactory.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/DefaultPageFactory.java?rev=760398&r1=760397&r2=760398&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/DefaultPageFactory.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/DefaultPageFactory.java
Tue Mar 31 11:20:57 2009
@@ -26,19 +26,19 @@
/**
* A factory that constructs Pages.
*
- * @see
org.apache.wicket.settings.ISessionSettings#setPageFactory(IPageFactory)
- * @see IPageFactory
+ * @see org.apache.wicket.settings.ISessionSettings#setPageFactory(PageFactory)
+ * @see PageFactory
*
* @author Juergen Donnerstag
* @author Jonathan Locke
*/
-public final class DefaultPageFactory implements IPageFactory
+public final class DefaultPageFactory implements PageFactory
{
/** Map of Constructors for Page subclasses */
private final Map<Class<?>, Constructor<?>> constructorForClass =
Generics.newConcurrentHashMap();
/**
- * @see IPageFactory#newPage(Class)
+ * @see PageFactory#newPage(Class)
*/
public final <C extends IPage> Page newPage(final Class<C> pageClass)
{
@@ -67,7 +67,7 @@
}
/**
- * @see IPageFactory#newPage(Class, PageParameters)
+ * @see PageFactory#newPage(Class, PageParameters)
*/
public final <C extends IPage> Page newPage(final Class<C> pageClass,
final PageParameters parameters)
@@ -83,7 +83,7 @@
}
// Always try default constructor if one exists
- return processPage(newPage(pageClass), null);
+ return processPage(newPage(pageClass), parameters);
}
/**
Copied:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/PageFactory.java
(from r759532,
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/IPageFactory.java)
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/PageFactory.java?p2=wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/PageFactory.java&p1=wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/IPageFactory.java&r1=759532&r2=760398&rev=760398&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/IPageFactory.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/PageFactory.java
Tue Mar 31 11:20:57 2009
@@ -32,7 +32,7 @@
* @author Juergen Donnerstag
* @author Jonathan Locke
*/
-public interface IPageFactory
+public interface PageFactory
{
/**
* Creates a new page using a page class.
Propchange:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/PageFactory.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/protocol/http/WebApplication.java?rev=760398&r1=760397&r2=760398&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
Tue Mar 31 11:20:57 2009
@@ -22,7 +22,7 @@
import org.apache.wicket.Application;
import org.apache.wicket.DefaultPageFactory;
import org.apache.wicket.IPage;
-import org.apache.wicket.IPageFactory;
+import org.apache.wicket.PageFactory;
import org.apache.wicket.Page;
import org.apache.wicket.PageParameters;
import org.apache.wicket.RequestCycle;
@@ -33,6 +33,7 @@
import org.apache.wicket.request.RequestHandlerEncoderRegistry;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.encoder.BookmarkableEncoder;
+import org.apache.wicket.request.encoder.BufferedResponseEncoder;
import org.apache.wicket.request.encoder.EncoderContext;
import org.apache.wicket.request.encoder.PageInstanceEncoder;
import org.apache.wicket.request.encoder.ResourceReferenceEncoder;
@@ -56,6 +57,7 @@
mount(new PageInstanceEncoder());
mount(new BookmarkableEncoder());
mount(new ResourceReferenceEncoder());
+ mount(new BufferedResponseEncoder());
}
@@ -199,9 +201,9 @@
return resourceReferenceRegistry;
}
- private IPageFactory pageFactory = new DefaultPageFactory();
+ private PageFactory pageFactory = new DefaultPageFactory();
- public IPageFactory getPageFactory()
+ public PageFactory getPageFactory()
{
return pageFactory;
}
@@ -216,6 +218,12 @@
// TODO: Do this properly
private Map<String, BufferedWebResponse> storedResponses = new
ConcurrentHashMap<String, BufferedWebResponse>();
+ public boolean hasBufferedResponse(String sessionId, Url url)
+ {
+ String key = sessionId + url.toString();
+ return storedResponses.containsKey(key);
+ }
+
public BufferedWebResponse getAndRemoveBufferedResponse(String
sessionId, Url url)
{
String key = sessionId + url.toString();
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/RequestHandlerEncoderRegistry.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/RequestHandlerEncoderRegistry.java?rev=760398&r1=760397&r2=760398&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/RequestHandlerEncoderRegistry.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/RequestHandlerEncoderRegistry.java
Tue Mar 31 11:20:57 2009
@@ -16,6 +16,9 @@
*/
package org.apache.wicket.request;
+import java.security.spec.ECField;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -50,11 +53,41 @@
{
encoders.remove(encoder);
}
+
+ private static class EncoderWithSegmentsCount implements
Comparable<EncoderWithSegmentsCount>
+ {
+ private final RequestHandlerEncoder encoder;
+ private final int segmentsCount;
+
+ public EncoderWithSegmentsCount(RequestHandlerEncoder encoder,
int segmentsCount)
+ {
+ this.encoder = encoder;
+ this.segmentsCount = segmentsCount;
+ }
+
+ public int compareTo(EncoderWithSegmentsCount o)
+ {
+ return o.segmentsCount - this.segmentsCount;
+ }
+
+ public RequestHandlerEncoder getEncoder()
+ {
+ return encoder;
+ }
+
+ public int getSegmentsCount()
+ {
+ return segmentsCount;
+ }
+ };
/**
* Searches the registered {...@link RequestHandlerEncoder}s to find
one that can decode the
- * {...@link Request}. Each registered {...@link RequestHandlerEncoder}
is asked to decode the
- * {...@link Request}. The encoder with highest matching segments count
that can decode the
+ * {...@link Request}. Each registered {...@link RequestHandlerEncoder}
is asked to provide the
+ * matching segments count. Then the encoders are asked to decode the
request in order
+ * depending on the provided segments count.
+ * <p>
+ * The encoder with highest matching segments count that can decode the
* request is returned.
*
* @param request
@@ -63,44 +96,25 @@
*/
public RequestHandler decode(Request request)
{
- // last found RequestHandler with highest matching segments
count
- RequestHandler last = null;
- int maxMatchingSegmentsCount = -1;
-
+ List<EncoderWithSegmentsCount> list = new
ArrayList<EncoderWithSegmentsCount>(encoders.size());
+
for (RequestHandlerEncoder encoder : encoders)
{
- // no handler has been found yet
- if (last == null)
- {
- // try to get the handler immediately, at this
point we don't care for matching
- // segments count
- last = encoder.decode(request);
- if (last != null)
- {
- // found one - get the matching
segments count so that it can be compared
- // to other encoders found later
- maxMatchingSegmentsCount =
encoder.getMachingSegmentsCount(request);
- }
- }
- else
+ list.add(new EncoderWithSegmentsCount(encoder,
encoder.getMachingSegmentsCount(request)));
+ }
+
+ Collections.sort(list);
+
+ for (EncoderWithSegmentsCount encoder : list)
+ {
+ RequestHandler handler =
encoder.getEncoder().decode(request);
+ if (handler != null)
{
- // we already have a handler, try to find out
if this one has bigger matching
- // segments count
- int count =
encoder.getMachingSegmentsCount(request);
- if (count > maxMatchingSegmentsCount)
- {
- // seems so
- RequestHandler handler =
encoder.decode(request);
- if (handler != null)
- {
- // replace the last one
- last = handler;
- maxMatchingSegmentsCount =
count;
- }
- }
+ return handler;
}
}
- return last;
+
+ return null;
}
/**
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRenderer.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRenderer.java?rev=760398&r1=760397&r2=760398&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRenderer.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRenderer.java
Tue Mar 31 11:20:57 2009
@@ -113,7 +113,7 @@
}
// we want the new URL to have at least one segment
(other than possible ../)
- if (urlSegments.isEmpty() && last != null)
+ if (last != null && (urlSegments.isEmpty() ||
baseUrlSegments.size() == common))
{
--common;
urlSegments.add(0, last);
Added:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/encoder/BufferedResponseEncoder.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/encoder/BufferedResponseEncoder.java?rev=760398&view=auto
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/encoder/BufferedResponseEncoder.java
(added)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/encoder/BufferedResponseEncoder.java
Tue Mar 31 11:20:57 2009
@@ -0,0 +1,91 @@
+package org.apache.wicket.request.encoder;
+
+import org.apache.wicket.RequestCycle;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.RequestHandler;
+import org.apache.wicket.request.RequestHandlerEncoder;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.handler.impl.BufferedResponseRequestHandler;
+import org.apache.wicket.request.request.Request;
+import org.apache.wicket.request.response.BufferedWebResponse;
+
+/**
+ * Encoder that intercepts requests for which there is already stored buffer
with rendered data.
+ *
+ * @author Matej Knopp
+ */
+public class BufferedResponseEncoder implements RequestHandlerEncoder
+{
+
+ public BufferedResponseEncoder()
+ {
+ }
+
+ protected String getSessionId()
+ {
+ // TODO - get current session id
+ return "";
+ }
+
+ protected boolean hasBufferedResponse(Url url)
+ {
+ return WebApplication.get().hasBufferedResponse(getSessionId(),
url);
+ }
+
+ protected BufferedWebResponse getAndRemoveBufferedResponse(Url url)
+ {
+ return
WebApplication.get().getAndRemoveBufferedResponse(getSessionId(), url);
+ }
+
+ private Request getRequest(Request original)
+ {
+ // The buffers are stored under "real" URL which can be
different
+ // than the URL handlers get due to global URL
pre/postprocessing
+ // (i.e. prepending URL with language segment).
+ // Because of that we need find out the real URL from request
cycle
+
+ if (RequestCycle.get() != null)
+ {
+ return RequestCycle.get().getRequest();
+ }
+ else
+ {
+ return original;
+ }
+ }
+
+ public RequestHandler decode(Request request)
+ {
+ request = getRequest(request);
+
+ BufferedWebResponse response =
getAndRemoveBufferedResponse(request.getUrl());
+ if (response != null)
+ {
+ return new BufferedResponseRequestHandler(response);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public Url encode(RequestHandler requestHandler)
+ {
+ return null;
+ }
+
+ public int getMachingSegmentsCount(Request request)
+ {
+ request = getRequest(request);
+
+ if (hasBufferedResponse(request.getUrl()))
+ {
+ return Integer.MAX_VALUE;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
+}
Propchange:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/encoder/BufferedResponseEncoder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/BufferedResponseRequestHandler.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/BufferedResponseRequestHandler.java?rev=760398&view=auto
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/BufferedResponseRequestHandler.java
(added)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/BufferedResponseRequestHandler.java
Tue Mar 31 11:20:57 2009
@@ -0,0 +1,27 @@
+package org.apache.wicket.request.handler.impl;
+
+import org.apache.wicket.RequestCycle;
+import org.apache.wicket.request.RequestHandler;
+import org.apache.wicket.request.response.BufferedWebResponse;
+import org.apache.wicket.request.response.WebResponse;
+
+public class BufferedResponseRequestHandler implements RequestHandler
+{
+ private final BufferedWebResponse bufferedWebResponse;
+
+ public BufferedResponseRequestHandler(BufferedWebResponse
bufferedWebResponse)
+ {
+ this.bufferedWebResponse = bufferedWebResponse;
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+
+ }
+
+ public void respond(RequestCycle requestCycle)
+ {
+ bufferedWebResponse.writeTo((WebResponse)
requestCycle.getResponse());
+ }
+
+}
Propchange:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/BufferedResponseRequestHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/ListenerInterfaceRequestHandler.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/ListenerInterfaceRequestHandler.java?rev=760398&r1=760397&r2=760398&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/ListenerInterfaceRequestHandler.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/ListenerInterfaceRequestHandler.java
Tue Mar 31 11:20:57 2009
@@ -25,6 +25,7 @@
import org.apache.wicket.behavior.IBehavior;
import org.apache.wicket.request.handler.ComponentRequestHandler;
import org.apache.wicket.request.handler.PageRequestHandler;
+import
org.apache.wicket.request.handler.impl.RenderPageRequestHandler.RedirectPolicy;
/**
* Request handler that invokes the listener interface on component and
renders page afterwards.
@@ -146,7 +147,8 @@
}
}
- requestCycle.replaceCurrentRequestHandler(new
RenderPageRequestHandler(this.page));
+ RedirectPolicy policy = page.isPageStateless() ?
RedirectPolicy.NEVER_REDIRECT : RedirectPolicy.AUTO_REDIRECT;
+ requestCycle.replaceCurrentRequestHandler(new
RenderPageRequestHandler(this.page, policy));
}
else
{
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/RenderPageRequestHandler.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/RenderPageRequestHandler.java?rev=760398&r1=760397&r2=760398&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/RenderPageRequestHandler.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/handler/impl/RenderPageRequestHandler.java
Tue Mar 31 11:20:57 2009
@@ -28,6 +28,8 @@
import org.apache.wicket.request.response.Response;
import org.apache.wicket.request.response.WebResponse;
import org.apache.wicket.settings.RequestCycleSettings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* {...@link RequestHandler} that renders page instance. Depending on the
<code>redirectPolicy</code>
@@ -64,7 +66,7 @@
* met:
* <ul>
* <li>current request URL is different than page URL
- * <li>page is not stateless
+ * <li>page is not stateless or (page is stateless and but
session is not temporary)
* <li>render strategy is either REDIRECT_TO_BUFFER or
REDIRECT_TO_RENDER</li>
*/
AUTO_REDIRECT
@@ -140,16 +142,26 @@
page.renderPage();
}
+ protected String getSessionId()
+ {
+ // TODO - get current session id
+ return "";
+ }
+
+ protected boolean isSessionTemporary()
+ {
+ // TODO - determine if current session is temporary
+ return true;
+ }
+
protected BufferedWebResponse getAndRemoveBufferedResponse(Url url)
{
- // TODO: SessionId
- return WebApplication.get().getAndRemoveBufferedResponse("",
url);
+ return
WebApplication.get().getAndRemoveBufferedResponse(getSessionId(), url);
}
protected void storeBufferedResponse(Url url, BufferedWebResponse
response)
{
- // TODO: SessionId
- WebApplication.get().storeBufferedResponse("", url, response);
+ WebApplication.get().storeBufferedResponse(getSessionId(), url,
response);
}
/**
@@ -209,20 +221,39 @@
if (bufferedResponse != null)
{
+ logger.warn("The Buffered response should be handled by
BufferedResponseRequestHandler");
// if there is saved response for this URL render it
bufferedResponse.writeTo((WebResponse)
requestCycle.getResponse());
}
- else if (redirectPolicy == RedirectPolicy.NEVER_REDIRECT ||
isOnePassRender() || targetUrl.equals(currentUrl)
- || (isRedirectToRender() &&
page.isPageStateless()))
+ else if (redirectPolicy == RedirectPolicy.NEVER_REDIRECT ||
isOnePassRender() //
+ || (targetUrl.equals(currentUrl) &&
!page.isPageStateless()) //
+ || (targetUrl.equals(currentUrl) &&
isRedirectToRender() && page.isPageStateless()))
{
// if the policy is never to redirect
// or one pass render mode is on
- // or the targetUrl matches current url
+ // or the targetUrl matches current url and the page is
not stateless
+ // or the targetUrl matches current url, page is
stateless but it's redirect-to-render
// just render the page
renderPage();
}
- else if (redirectPolicy == RedirectPolicy.ALWAYS_REDIRECT ||
isRedirectToRender())
+ else if (!targetUrl.equals(currentUrl) //
+ && (redirectPolicy ==
RedirectPolicy.ALWAYS_REDIRECT || isRedirectToRender()))
{
+ // if target URL is different
+ // and render policy is always-redirect or it's
redirect-to-render
+ redirectTo(targetUrl, requestCycle);
+ }
+ else if (!targetUrl.equals(currentUrl) //
+ && isSessionTemporary() &&
page.isPageStateless())
+ {
+ // if target URL is different and session is temporary
and page is stateless
+ // this is special case when page is stateless but
there is no session so we can't render it to buffer
+
+ // note: if we had session here we would render the
page to buffer and then redirect to URL generated
+ // *after* page has been rendered (the statelessness
may change during request). this would save one redirect
+ // because now we have to render to URL generated
*before* page is rendered, render the page, get URL
+ // after render and if the URL is different (meaning
page is not stateless), save the buffer and redirect again
+ // (which is pretty much what the next step does)
redirectTo(targetUrl, requestCycle);
}
else if (isRedirectToBuffer())
@@ -243,6 +274,7 @@
response = renderPage(targetUrl2, requestCycle);
}
+ // if page is still stateless after render
if (page.isPageStateless() &&
!enableRedirectForStatelessPage())
{
// we don't want the redirect to happen for
stateless page
@@ -261,7 +293,7 @@
redirectTo(targetUrl2, requestCycle);
}
- }
+ }
else
{
throw new IllegalStateException("Unknown
RenderStrategy.");
@@ -290,4 +322,6 @@
{
return page.getPageParameters();
}
+
+ private static Logger logger =
LoggerFactory.getLogger(RenderPageRequestHandler.class);
}
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/test/java/org/apache/wicket/request/UrlRendererTest.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/test/java/org/apache/wicket/request/UrlRendererTest.java?rev=760398&r1=760397&r2=760398&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/test/java/org/apache/wicket/request/UrlRendererTest.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/test/java/org/apache/wicket/request/UrlRendererTest.java
Tue Mar 31 11:20:57 2009
@@ -33,6 +33,7 @@
{
UrlRenderer r1 = new UrlRenderer(Url.parse("foo/bar/baz?a=b"));
assertEquals("xyz?x=y",
r1.renderUrl(Url.parse("foo/bar/xyz?x=y")));
+ assertEquals("baz/xyz?x=y",
r1.renderUrl(Url.parse("foo/bar/baz/xyz?x=y")));
assertEquals("../aaa/xyz?x=y",
r1.renderUrl(Url.parse("foo/aaa/xyz?x=y")));
assertEquals("../../bbb/aaa/xyz?x=y",
r1.renderUrl(Url.parse("bbb/aaa/xyz?x=y")));
}
@@ -82,4 +83,13 @@
UrlRenderer r1 = new
UrlRenderer(Url.parse("MyTestPage/indexed1/indexed2/indexed3?10-27.ILinkListener-l2&p1=v1"));
assertEquals("../../../MyTestPage?10",
r1.renderUrl(Url.parse("MyTestPage?10")));
}
+
+ /**
+ *
+ */
+ public void test8()
+ {
+ UrlRenderer r1 = new
UrlRenderer(Url.parse("en/first-test-page?16-1.ILinkListener-l1"));
+
assertEquals("first-test-page/indexed1/indexed2/indexed3?p1=v1",
r1.renderUrl(Url.parse("en/first-test-page/indexed1/indexed2/indexed3?p1=v1")));
+ }
}