[ 
https://issues.apache.org/jira/browse/WICKET-847?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12628320#action_12628320
 ] 

erikvanoosten edited comment on WICKET-847 at 9/4/08 5:03 AM:
----------------------------------------------------------------

I got bitten by this as well (with 1.4-m3).

The failing combination is: Tomcat and IE (6 or 7).

Firefox correctly interprets the "./" as "" so its okay to use Firefox + Tomcat.
Jetty converts "./" to "", so its okay to use any borwser on Jetty.

My workaround was to patch these two Wicket core files (I can confirm it works 
when redirecting to the home page):

BookmarkablePageRequestTarget:
-----------8<--------------------------
        public void respond(RequestCycle requestCycle)
        {
                if (pageClassRef != null && pageClassRef.get() != null)
                {
                        if (requestCycle.isRedirect())
                        {
                                IRequestCycleProcessor processor = 
requestCycle.getProcessor();
                                String redirectUrl = 
processor.getRequestCodingStrategy()
                                        .encode(requestCycle, this)
                                        .toString();
// START OF PATCH
                if (redirectUrl.startsWith("./")) {
                    redirectUrl = redirectUrl.substring(2);
                }
// END OF PATCH
                requestCycle.getResponse().redirect(redirectUrl);
                        }
                        else
                        {
                                // Let the page render itself
                                getPage(requestCycle).renderPage();
                        }
                }
        }
-----------8<--------------------------


RedirectRequestTarget:
-----------8<--------------------------
        public void respond(RequestCycle requestCycle)
        {
                Response response = requestCycle.getResponse();
                response.reset();
                if (redirectUrl.startsWith("/"))
                {
                        RequestContext rc = RequestContext.get();
                        if (rc.isPortletRequest() && 
((PortletRequestContext)rc).isEmbedded())
                        {
                                response.redirect(redirectUrl);
                        }
                        else
                        {
                String location = RequestCycle.get()
                        .getRequest()
                        .getRelativePathPrefixToContextRoot() +
                        this.redirectUrl.substring(1);
// START OF PATCH
                if (location.startsWith("./")) {
                    location = location.substring(2);
                }
// END OF PATCH
                response.redirect(location);
                        }
                }
                else if (redirectUrl.startsWith("http://";) || 
redirectUrl.startsWith("https://";))
                {
                        response.redirect(redirectUrl);
                }
                else
                {
                        response.redirect(RequestCycle.get()
                                .getRequest()
                                .getRelativePathPrefixToWicketHandler() +
                                redirectUrl);
                }
        }
-----------8<--------------------------


      was (Author: erikvanoosten):
    I got bitten by this as well (with 1.4-m3).

The failing combination is: Tomcat and IE (6 or 7).

Firefox correctly interprets the "./" as "" so its okay to use Firefox + Tomcat.
Jetty converts "./" to "", so its okay to use any borwser on Jetty.

My workaround was to patch these two Wicket core files (I can confirm it works):

BookmarkablePageRequestTarget:
-----------8<--------------------------
        public void respond(RequestCycle requestCycle)
        {
                if (pageClassRef != null && pageClassRef.get() != null)
                {
                        if (requestCycle.isRedirect())
                        {
                                IRequestCycleProcessor processor = 
requestCycle.getProcessor();
                                String redirectUrl = 
processor.getRequestCodingStrategy()
                                        .encode(requestCycle, this)
                                        .toString();
// START OF PATCH
                if (redirectUrl.startsWith("./")) {
                    redirectUrl = redirectUrl.substring(2);
                }
// END OF PATCH
                requestCycle.getResponse().redirect(redirectUrl);
                        }
                        else
                        {
                                // Let the page render itself
                                getPage(requestCycle).renderPage();
                        }
                }
        }
-----------8<--------------------------


RedirectRequestTarget:
-----------8<--------------------------
        public void respond(RequestCycle requestCycle)
        {
                Response response = requestCycle.getResponse();
                response.reset();
                if (redirectUrl.startsWith("/"))
                {
                        RequestContext rc = RequestContext.get();
                        if (rc.isPortletRequest() && 
((PortletRequestContext)rc).isEmbedded())
                        {
                                response.redirect(redirectUrl);
                        }
                        else
                        {
                String location = RequestCycle.get()
                        .getRequest()
                        .getRelativePathPrefixToContextRoot() +
                        this.redirectUrl.substring(1);
// START OF PATCH
                if (location.startsWith("./")) {
                    location = location.substring(2);
                }
// END OF PATCH
                response.redirect(location);
                        }
                }
                else if (redirectUrl.startsWith("http://";) || 
redirectUrl.startsWith("https://";))
                {
                        response.redirect(redirectUrl);
                }
                else
                {
                        response.redirect(RequestCycle.get()
                                .getRequest()
                                .getRelativePathPrefixToWicketHandler() +
                                redirectUrl);
                }
        }
-----------8<--------------------------

  
> setResponsePage redirects to wrong url
> --------------------------------------
>
>                 Key: WICKET-847
>                 URL: https://issues.apache.org/jira/browse/WICKET-847
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.3.0-beta2
>            Reporter: Andrew Klochkov
>            Assignee: Alastair Maw
>             Fix For: 1.3.5
>
>         Attachments: wicket-quickstart.tar.gz
>
>
> When I do setResponsePage(MyHomePage.class) IE tries to show me 
> "my.site.com/./" url and gets 404 response. 
> Firefox just shows "my.site.com" without any troubles. I'm using wicket 
> 1.3-beta2 and WicketFilter mapped to /*. 
> It's being reproduced under tomcat only, jetty works fine. My tomcat version 
> is 5.5.17. 
> Quickstart project which reproduces the bug is attached.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to