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]

Reply via email to