Hi guys,

I have an application with the following url scheme:

http://www.mydomain.com[/brand][/locale]/app[/wicketrelativepath]

The brand and locale parts are optional, and everything after app is the relative path to the Wicket page. The brand determines the style to use.

The intention is, that if the brand or locale are specified in the URL they take precedence over any style/locale contained in the session. To accomplish this I did 3 things:

1) override WicketFilter's getRelativePath()
2) have a filter add style/locale attributes determined from the url to the http session
3) override getLocale() on my base page class (BasePage) to read as follows:

        @Override
        public Locale getLocale() {
// Get brand based on the style in the url, or default Brand if the style is null...
                MyBrand brand = MyWebRrequest.get().getBrand();
                // First check if there is a required locale (locale in the 
url).
                Locale locale = MyWebRequest.get().getRequiredLocale();
                if (locale == null) {
                        // No required locale, let's see if the current locale 
is supported.
                        final Locale currentLocale = super.getLocale();
                        if (brand.isLocaleSupported(currentLocale)) {
                                locale = currentLocale;
                        } else {
// Current locale is not supported, let's see we can use the user's preferred locale.
                                final Locale preferredLocale = 
MyWebRequest.get().getLocale();
                                if (brand.isLocaleSupported(preferredLocale)) {
                                        locale = preferredLocale;
                                } else {
                                        // The preferred locale is not 
supported, use the default locale.
                                        locale = brand.getDefaultLocale();
                                }

                        }
                }
                return locale;
        }

This all works fine, for the locale. However, now I run into problems: I want to do a similar thing for the style.

What I had at the moment was:

        public MySession(final MyWebRequest request) {
                super(request);
                setStyle(request.getBrand().getStyle());
        }

Of course this does not work: when you change the url to another brand, it does not create a new session, so you keep the old brand. So I thought I'd override the getStyle() method in MySession. However I can't: Session.getStyle() is final.

Finally, I thought I could override Component.getStyle() to have a similar logic to the above code, but I can't do that either: Component does not have a getStyle() method.

So my developer-list question is basically: why is there such an asymmetry between style and locale? Why isn't there a getStyle() method on Component, and why is getStyle() on Session final?

My "user-list" question is: how can I achieve what I want?

Regards,
Sebastiaan

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to