You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "Thiago Henrique De Paula Figueiredo (Jira)" <ji...@apache.org> on 2021/01/30 13:41:00 UTC

[jira] [Assigned] (TAP5-2659) Direct instantiation of ComponentResourceSelector should be replaced with delegation to ComponentRequestSelectorAnalyzer

     [ https://issues.apache.org/jira/browse/TAP5-2659?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Thiago Henrique De Paula Figueiredo reassigned TAP5-2659:
---------------------------------------------------------

    Assignee: Thiago Henrique De Paula Figueiredo

> Direct instantiation of ComponentResourceSelector should be replaced with delegation to ComponentRequestSelectorAnalyzer
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: TAP5-2659
>                 URL: https://issues.apache.org/jira/browse/TAP5-2659
>             Project: Tapestry 5
>          Issue Type: Bug
>          Components: tapestry-core
>            Reporter: Dmitry Gusev
>            Assignee: Thiago Henrique De Paula Figueiredo
>            Priority: Major
>
> Some implementation methods in tapestry core still use direct instantiation of {{ComponentResourceSelector}} instead of delegating to {{ComponentRequestSelectorAnalyzer}}, namely:
> in {{ComponentMessageSourceImpl.java}}
>  
> {code:java}
> public Messages getMessages(ComponentModel componentModel, Locale locale)
> {
>     return getMessages(componentModel, new ComponentResourceSelector(locale));
> }
> public Messages getApplicationCatalog(Locale locale)
> {
>     return messagesSource.getMessages(appCatalogBundle, new ComponentResourceSelector(locale));
> } 
> {code}
> in {{ComponentTemplateSourceImpl.java}}
>  
> {code:java}
> public ComponentTemplate getTemplate(ComponentModel componentModel, Locale locale)
> {
>     return getTemplate(componentModel, new ComponentResourceSelector(locale));
> }{code}
> Which makes it impossible to use axes with message bundles and component templates.
>  
> Default implementation of {{ComponentRequestSelectorAnalyzer}} interface uses {{ThreadLocale}} instead of directly passed Locale instance. To workaround this above methods may temporarily set passed locale into ThreadLocal and restore original value after `#buildSelectorForRequest` is returned, i.e.:
> {code:java}
> public Messages getMessages(ComponentModel componentModel, Locale locale)
> {
>     Locale original = threadLocale.getLocale();
>     try
>     {
>         threadLocale.setLocale(locale);
>         return getMessages(componentModel, analyzer.buildSelectorForRequest());
>     }
>     finally
>     {
>         threadLocale.setLocale(original);
>     }
> }{code}
> {{}}
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)