As I have already written in previous mail (pointing to exact line that cause the errors) - Wicket is falling because it handles forwardUrl in incorrect way. It tries to remove "/" and filterPath from forwardUrl even though forwardUrl does not contain filterPath. I guess that it is because of an assumption that only wicket exists in application and no other framework has influence on forwardUrl. I don't know what are other cases that are handled by those lines, but forwardUrl can have any value and Wicket assume some concrete value.
On Tue, Nov 30, 2010 at 5:24 PM, Igor Vaynberg <igor.vaynb...@gmail.com> wrote: > first figure out why its failing - why is wicket generating a wrong > url, and then you can determine if its a bug in wicket or somewhere in > your configuration. > > -igor > > On Tue, Nov 30, 2010 at 2:21 AM, Krzysztof Kowalczyk > <kowalczyk.krzysz...@gmail.com> wrote: >> Hi, >> >> We have existing urls in a form: >> >> /long,and,complex,title,id/new_opinion >> /long,and,complex,title,id/something >> >> or sometimes >> >> /long,title/id/new_opinion >> >> The links like "/long,and,complex,title" are managed by fast and >> scalable view, and are stateless. Now we are using Wicket in the same >> war. It is mounted to "/cms". >> >> We are trying to replace forms, that are pure evil in the first >> technology with wicket based forms. But we need to keep the links >> untouched. >> >> So I created UrlRewrite (http://www.tuckey.org/urlrewrite/) rules: >> >> <urlrewrite use-query-string="true"> >> >> <rule> >> <from>^/(.*),(\d+)/new_opinion$</from> >> <to>/cms/new_opinion/id/$2/url/$1</to> >> </rule> >> >> <rule> >> <from>^/(\?wicket.*)</from> >> <to>/cms/$1</to> >> </rule> >> ... >> >> >> I have a wicket page - that is mounted on "/new_opinion" with enhanced >> HybridUrlCodingStrategy with: >> - redirectOnBookmarkableRequest = false >> >> First rule forwards the request to proper place. Wicket gets the >> correct requestUri and all the stuff. But the rule does not work if we >> have redirectOnBookmarkableRequest = true because Wicket constructs >> wrong urls in ServletWebRequest.getRelativePathPrefixToWicketHandler : >> >> if (!Strings.isEmpty(forwardUrl)) >> { >> // If this is an error page, this will be /mount or >> /?wicket:foo >> relativeUrl = forwardUrl.substring(1); >> relativeUrl = >> relativeUrl.substring(filterPath.length()); >> } >> >> before this fragment Wicket has correct link, after this we get: >> "g,and,complex,title,id/new_opinion", or errors (sometimes the link is >> shorter and I get array index out of bounds). If method does not throw >> exception it returns wrong number of ../ . Unfortunately >> redirectOnBookmarkableRequest = false does not solve the problem as >> the second rule catches Wicket that are redirected if they hit >> bookmarkable page. So this fragment need to be fixed in order to have >> working bookmarkable links with UrlRewrite. >> >> My temporary workaround is custom delegating WebRequest with small hack: >> >> public String getRelativePathPrefixToWicketHandler() { >> HttpServletRequest httpRequest = getHttpServletRequest(); >> >> String forwardUrl = >> (String)httpRequest.getAttribute("javax.servlet.forward.servlet_path"); >> final String filterPath = >> (String)httpRequest.getAttribute(WicketFilter.FILTER_PATH_ATTR); >> >> if (!Strings.isEmpty(forwardUrl)) >> { >> int count = forwardUrl.split("/").length; >> >> String string = ""; >> >> for (int i = 1; i < count; i++) { >> string += "../"; >> } >> >> return string + filterPath; >> }else { >> return wrappedReqest.getRelativePathPrefixToWicketHandler(); >> } >> } >> >> I guess it will not work in all cases though... >> >> If there is a different way of doing url rewriting? If not, I consider >> it a bug in Wicket. >> >> Regards, >> Krzysztof Kowalczyk >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org