You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Sebastian <no...@gmx.net> on 2010/11/14 02:15:12 UTC
Multiple URL coding strategies on the same mount path
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: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: Multiple URL coding strategies on the same mount path
Posted by Martin Grigorov <mg...@apache.org>.
The exceptions are lightweight, i.e. they don't have stack trace information
and thus are faster to instantiate. See AbortException code
On Sun, Nov 14, 2010 at 2:01 PM, Sebastian <no...@gmx.net> wrote:
> Does that scale? This means an exception is thrown on each HTTP request
> below /shop/
>
> Regards,
>
> Seb
>
>
> On 14.11.2010 03:23, Igor Vaynberg wrote:
>
>> 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<no...@gmx.net> 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: users-unsubscribe@wicket.apache.org
>>> For additional commands, e-mail: users-help@wicket.apache.org
>>>
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
Re: Multiple URL coding strategies on the same mount path
Posted by Sebastian <no...@gmx.net>.
Does that scale? This means an exception is thrown on each HTTP request
below /shop/
Regards,
Seb
On 14.11.2010 03:23, Igor Vaynberg wrote:
> 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<no...@gmx.net> 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: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: Multiple URL coding strategies on the same mount path
Posted by Igor Vaynberg <ig...@gmail.com>.
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 <no...@gmx.net> 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: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org