You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Daniel Kleine-Albers <dk...@dka-edv.net> on 2010/01/13 18:22:54 UTC

Re: currentLocale vs persistentLocale

Dear Gunnar,

did you by chance find a solution to this problem? I seem to have the same problem with a very similar implementation of the PPGK. As soon as I remove the PPGK the locale is switched correctly. If I leave it in, the locale is always en_US even if this is not in the SUPPORTED_LOCALES.

Cheers and thanks
Daniel




On 31.10.2009, at 09:30, Gunnar Eketrapp wrote:

> And here is the relevant part from PPGK
> 
>    /**
>     * Check the rights of the user for the page requested
>     *
>     * @throws IOException
>     */
>    public boolean checkAccess(String pageName, Request request, Response
> response) throws IOException {
>        boolean canAccess = true;
> 
> 
>        /* Is the requested page private ? */
>        Component page = componentSource.getPage(pageName);
>        ProtectedPage pp =
> page.getClass().getAnnotation(ProtectedPage.class);
>        boolean protectedPage = pp != null;
> 
>        if (protectedPage) {
>            // logger.debug("checkAccess: " + pageName);
>            canAccess = false;
> 
>            // If User exists and he has the required role give him access
>            if (sessionStateManager.exists(User.class)) {
>                User user = sessionStateManager.get(User.class);
>                canAccess = user.isSuperAdmin() || user.hasRole(pp.role());
>                if (!canAccess)
>                    logger.debug("User " + user + " Role " + pp.role() + "
> needed by page " + pageName);
>            }
>        }
> 
>        /*
>         * This page can't be requested by a non-authenticated user => we
> redirect him to the LogIn page
>         */
>        if (!canAccess) {
>            if (page != null) {
>                // Setup Login page to redirect to the secured page after
> the login
>                Object obj = componentSource.getPage(Login.class);
>                ILogin login = (ILogin) obj;
>                login.setRedirectTo(page);
>            }
>            response.sendRedirect(request.getContextPath() + LOGIN_PAGE);
>            return true; // Make sure to leave the chain
>        }
> 
>        return false;
>    }
> 
> 
> 2009/10/31 Gunnar Eketrapp <gu...@gmail.com>
> 
>> Hi!
>> 
>> This morning I made a test since I suspected that it was the introduction
>> of the ProtectedPageGateKeeper that hade sideeffects on the locale handling.
>> 
>> When I removed the PPGK everyhting worked as normal!
>> 
>> So now I am investigating why the PPGK dispacther interferes with T5's
>> locale handling.
>> 
>> A clue anyone?
>> 
>> 
>> /Gunnar
>> 
>> 2009/10/30 Gunnar Eketrapp <gu...@gmail.com>
>> 
>>> Hi !
>>> 
>>> Given these injections ...
>>> 
>>>    @Inject
>>>    private PersistentLocale persistentLocale;
>>> 
>>>    @Inject
>>>    private Locale currentLocale;
>>> 
>>> ... what should be the value of currentLocale. I.e. after that the
>>> persistent locale has been set, should curentLocale follow?
>>> 
>>> I will conduct tests tomorrow with a minimal project but the locale
>>> handling in my project is quite fucked up right now and it is driving me
>>> crazy.
>>> 
>>> I assume that it should just be to call persistentLocale.set() in an
>>> action link method and after that things should work. But for me they are
>>> not ...
>>> 
>>> /Gunnar
>>> 
>>> 
>>> 
>>> 2009/10/30 Gunnar Eketrapp <gu...@gmail.com>
>>> 
>>>> Hi!
>>>> 
>>>> The code below is not PROD ready yet. The first section is to setup input
>>>> fields with label inside them.
>>>> Something that our "designers" seems slick!
>>>> 
>>>> The state locale is used it to remember the locale when called from a
>>>> flash menu
>>>> that "discarded" the persistent locale. The flash menu is feeded with
>>>> special pages
>>>> that resets the persitent locale ... and redirects to the actial page.
>>>> 
>>>> Shit this seems messy ...
>>>> 
>>>> Thanks for the help anyway!
>>>> 
>>>> /Gunnar
>>>> 
>>>>  @SetupRender
>>>>    void setupComponent()
>>>>    {
>>>>        if (!userExists) {
>>>>            username = messages.get("username");
>>>>            password = messages.get("password");
>>>>        } else {
>>>>            username = user.getUsername();
>>>>            password = messages.get("password");
>>>>        }
>>>> 
>>>>        language = currentLocale.getLanguage();
>>>> 
>>>>        log.debug(LOGPRE + "1:
>>>> TellLayout.setupComponent(currentLocale.language=" + language + ")");
>>>>        if ((null == state.getLocale()) && (language != null)) {
>>>>            state.setLocale(new Locale(language));
>>>>            log.debug(LOGPRE + "2: TellLayout.setupComponent(state.locale
>>>> initiated to " + state.getLocale() + ")");
>>>>        }
>>>> 
>>>>        if (!persistentLocale.isSet()) {
>>>>            persistentLocale.set(state.getLocale());
>>>>            log.debug(LOGPRE + "3:
>>>> TellLayout.setupComponent(persistentLocale.set(" + persistentLocale.get() +
>>>> ")");
>>>>        } else {
>>>>            log.debug(LOGPRE + "4:
>>>> TellLayout.setupComponent(persistentLocale=" + persistentLocale.get() +
>>>> ")");
>>>>        }
>>>> 
>>>>        // -- Localize account menu texts. --
>>>>        createAccountMenu();
>>>> 
>>>>    }
>>>> 
>>>> 
>>>> 2009/10/30 cordenier christophe <ch...@gmail.com>
>>>> 
>>>>> To what corresponds exactly this logs in your rendering scenario ?
>>>>> 
>>>>> [DEBUG] components.TellLayout <<< --- TELLGAMING --- >>>: 1:
>>>>> TellLayout.setupComponent(
>>>>> currentLocale.language=sv)
>>>>> [DEBUG] components.TellLayout <<< --- TELLGAMING --- >>>: 4:
>>>>> TellLayout.setupComponent(persistentLocale=en)
>>>>> 
>>>>> 
>>>>> 2009/10/30 cordenier christophe <ch...@gmail.com>
>>>>> 
>>>>>> Sorry i have missed
>>>>>> 
>>>>>> [DEBUG] AppModule.
>>>>>> ProtectedPageGateKeeper PPGK.path=/en/tellfriends
>>>>>> 
>>>>>> 
>>>>>> 2009/10/30 Gunnar Eketrapp <gu...@gmail.com>
>>>>>> 
>>>>>>> Hi!
>>>>>>> 
>>>>>>> Well I have read that page over and over ...
>>>>>>> 
>>>>>>> I am calling persistentLocale.set() in the action link connected to
>>>>> my
>>>>>>> language selector.
>>>>>>> 
>>>>>>> But for some reasons the persistentLocale is not used when rendering
>>>>> ....
>>>>>>> 
>>>>>>> The page below is rendered in swedish even if the persistentLocale is
>>>>>>> english.
>>>>>>> 
>>>>>>> [DEBUG] AppModule.ProtectedPageGateKeeper PPGK.path=/en/tellfriends
>>>>>>> [DEBUG] components.TellLayout <<< --- TELLGAMING --- >>>: 1:
>>>>>>> TellLayout.setupComponent(currentLocale.language=sv)
>>>>>>> [DEBUG] components.TellLayout <<< --- TELLGAMING --- >>>: 4:
>>>>>>> TellLayout.setupComponent(persistentLocale=en)
>>>>>>> 
>>>>>>> 
>>>>>>> To this I have ...
>>>>>>> 
>>>>>>> TellFriends_en.properties
>>>>>>> TellFriends_sv.properties
>>>>>>> 
>>>>>>> ... and "sv" is the default language.
>>>>>>> 
>>>>>>> /Gunnar
>>>>>>> 
>>>>>>> 2009/10/30 cordenier christophe <ch...@gmail.com>
>>>>>>> 
>>>>>>>> Hi
>>>>>>>> 
>>>>>>>> Have a look at 'Changing the Locale' here
>>>>>>>> http://tapestry.apache.org/tapestry5.1/guide/localization.html
>>>>>>>> to check if your are using the good scenario to change locale,
>>>>> since
>>>>>>>> Tapestry 5.1 uses URL to store Local and not a cookie (like in
>>>>> 5.0.18)
>>>>>>>> 
>>>>>>>> Christophe.
>>>>>>>> 
>>>>>>>> 2009/10/30 Gunnar Eketrapp <gu...@gmail.com>
>>>>>>>> 
>>>>>>>>> Hi!
>>>>>>>>> 
>>>>>>>>> For some reason my pages are rendered accoring to currentLocale
>>>>> and
>>>>>>> not
>>>>>>>>> persistentLocale.
>>>>>>>>> 
>>>>>>>>> Is there something I should now?
>>>>>>>>> 
>>>>>>>>> Thanks in advance,
>>>>>>>>> Gunnar Eketrapp
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> --
>>>>>>> [Hem: 08-715 59 57, Mobil: 0708-52 62 90]
>>>>>>> Allévägen 2A, 132 42 Saltsjö-Boo
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> [Hem: 08-715 59 57, Mobil: 0708-52 62 90]
>>>> Allévägen 2A, 132 42 Saltsjö-Boo
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> [Hem: 08-715 59 57, Mobil: 0708-52 62 90]
>>> Allévägen 2A, 132 42 Saltsjö-Boo
>>> 
>> 
>> 
>> 
>> --
>> [Hem: 08-715 59 57, Mobil: 0708-52 62 90]
>> Allévägen 2A, 132 42 Saltsjö-Boo
>> 
> 
> 
> 
> -- 
> [Hem: 08-715 59 57, Mobil: 0708-52 62 90]
> Allévägen 2A, 132 42 Saltsjö-Boo