upgrade to 1.4.14 because that code looks different for me. -igor
On Tue, Nov 30, 2010 at 9:03 AM, Krzysztof Kowalczyk <[email protected]> wrote: > We use Wicket 1.4.12. > > On Tue, Nov 30, 2010 at 5:43 PM, Igor Vaynberg <[email protected]> > wrote: >> you must be using an old wicket version...upgrade to latest 1.4.x >> >> -igor >> >> On Tue, Nov 30, 2010 at 8:34 AM, Krzysztof Kowalczyk >> <[email protected]> wrote: >>> 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 <[email protected]> >>> 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 >>>> <[email protected]> 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: [email protected] >>>>> For additional commands, e-mail: [email protected] >>>>> >>>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: [email protected] >>>> For additional commands, e-mail: [email protected] >>>> >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [email protected] >>> For additional commands, e-mail: [email protected] >>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
