the easiest way is to mount a page onto /shop using indexed coding strategy. parse the parameters, and throw a restartresponseexception with the right page.
-igor On Sat, Nov 13, 2010 at 5:15 PM, Sebastian <[email protected]> wrote: > Hi, > we are currently migrating a webapp to Wicket and have the requirement to > keep the existing URL structure. > > Here is an example of REST-like URLs we need to match to different pages: > /shop/ => ShopWelcomePage.class > /shop/A/ => BrandsByFirstCharPage.class > /shop/A/Activision/ => BrandPage.class > /shop/A/Apple/ => BrandPage.class > /shop/A/Apple/iPhone-4G => ProductPage.class > /shop/H/HTC/ => BrandPage.class > /shop/<Category>/ => CategoryPage.class > /shop/<Category>/<SubCat> => SubCategoryPage.class > > What is the best way to achieve this in Wicket 1.4/1.5? > > I found https://issues.apache.org/jira/browse/WICKET-1534 where a > VersatileWebRequestCodingStrategy is proposed for Wicket 1.3. I updated the > code for Wicket 1.4 and it seems to work. However I am unsure if this really > is best practice or if there is a better solution available. > > Here is an example how I am currently mounting pages using the > VersatileWebRequestCodingStrategy: > > mount(new BookmarkablePageRequestTargetUrlCodingStrategy("/shop/", > ShopWelcomePage.class, null) { > public boolean matches(String path, boolean caseSensitive) { > return path.equals("shop/"); > } > }); > > mount(new MixedParamUrlCodingStrategy("/shop/", BrandPage.class, new > String[]{"brandFirstChar", "brandName"}) { > Pattern pattern = Pattern.compile("^shop/([^/])/([^/]+)/$"); > public boolean matches(String path, boolean caseSensitive) { > Matcher matcher = pattern.matcher(path); > return matcher.matches() && > matcher.group(1).equals(matcher.group(2).substring(0, 1)); > } > }); > > mount(new MixedParamUrlCodingStrategy("/shop/", ProductPage.class, new > String[]{"brandFirstChar", "brandName", "productSlug"}) { > Pattern pattern = Pattern.compile("^shop/[^/]/[^/]+/[^/]+/$"); > public boolean matches(String path, boolean caseSensitive) { > return pattern.matcher(path).matches(); > } > }); > > mount(new MixedParamUrlCodingStrategy("/shop/", CategoryPage.class, new > String[]{"category"}) { > Pattern pattern = Pattern.compile("^shop/[^/]{2,}/$"); > public boolean matches(String path, boolean caseSensitive) { > return pattern.matcher(path).matches(); > } > }); > > mount(new MixedParamUrlCodingStrategy("/shop/", SubCategoryPage.class, new > String[]{"category", "subCategory"}) { > Pattern pattern = Pattern.compile("^shop/[^/]{2,}/[^/]+/$"); > public boolean matches(String path, boolean caseSensitive) { > return pattern.matcher(path).matches(); > } > }); > > Thanks. > > Regards, > > Seb > > > --------------------------------------------------------------------- > 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]
